资料介绍
描述
每个人都讨厌失去一辆公共汽车,并在手机上安装无用的应用程序,而这些应用程序是您一生中要使用一次的。为了解决这个问题,我开发了一个新系统,它会在下一班公交车到达时询问 API Rest Service。一旦 API Rest 服务响应,到下一班车的剩余时间将显示在 LCD 屏幕上。ESP8266 将是负责请求 API REST 服务的板,LCD 屏幕将由 Arduino Uno 控制。我已经为 Zaragoza API 个性化了这个项目。例如,此 API 提供有关下一班公共汽车到达时间或公共汽车站地理坐标的信息。就我而言,我有 2 条感兴趣的公交线路,39 路和 CI2。于是,我准备了每时每刻选择我感兴趣的公交线路的系统,时间显示在液晶屏上。如果我不想赶公共汽车迟到,我必须在公共汽车到达前 5 分钟从家里出门。由于这种情况,每当下一班车还剩 5 分钟时,蜂鸣器就会响起。
项目开发说明
项目由2个代码组成,一个管理arduino uno,另一个负责管理ESP8266板。
我们将开始解释 ESP8266 代码:
正如我在上面解释的那样,该板将不断询问 API。API 的响应是通过 JSON,这种方式需要将信息解析成一个对象。为了解析 JSON,我们将使用 ArduinoJson 库,它可以轻松处理解析和序列化。
建议使用 Postman 等 API 客户端来验证您发送到 API 的消息(GET/POST、标头和参数)是否正确。您可以在下图中看到一个示例:
ArudinoJson Library(版本 6)提供在线助手。这样,如果您引入响应示例,它会生成用于序列化或解析 JSON 的代码。您可以在此链接中找到此助手:
https://arduinojson.org/v6/assistant/
因此,如果您介绍 JSON 示例,该助手将为您提供解析和使用这些结构的可能解决方案。就我而言,我将使用两种不同的结构,因为一个公交车站只有 1 辆公交车,而另一个公交车站有 2 辆公交车。
为了准备 GET 部分,我们将从 ESP8266WifiMulti 库创建一个 WifiClient。接下来,将客户端连接到 API 主机并开始发送 GET 请求、参数和标头。接下来,来自 muy 代码的示例:
WiFiClient client;
String server = "www.zaragoza.es";
// This will send the request to the server
if (client.connect(server,80)) {
//Serial.println("Conectado");
if (selectbus == 39) {
client.print("GET /api/recurso/urbanismo-infraestructuras/transporte-urbano/poste/tuzsa-508?");
client.println(" HTTP/1.0");
client.println("Host: www.zaragoza.es");
client.println("Content-Type: application/json");
client.println("Accept: application/json");
client.println();
} else {
client.print("GET /api/recurso/urbanismo-infraestructuras/transporte-urbano/poste/tuzsa-3022?");
client.println(" HTTP/1.0");
client.println("Host: www.zaragoza.es");
client.println("Content-Type: application/json");
client.println("Accept: application/json");
client.println();
}
} else {
//Serial.println("Connection Failed!!!");
}
为您请求的 API 调整您的代码。
一旦我们知道如何获取和处理 JSON 响应,就只需要完成一个任务:通过串行协议将部分响应发送到 Arduino Uno 开发板。
正确编程 ESP8266 板后,我们将直接关注 Arduino Uno 板代码。Arduino Uno 函数有:
- 接收和处理ESP8266发送的消息
- 控制 LCD 屏幕和更新下一班车的时间
- 选择我们感兴趣的总线
- 距离下一班车还有5分钟时发出缓冲声
为了接收和处理 ESP8266 发送的消息,将创建一个 SoftwareSerial 对象(在我的例子中,端口 Rx 为 2,Tx 引脚为 11)。这样,每次迭代客户端都会询问一些信息,它会收到 ESP8266 更新,并会在 LCD 屏幕上显示新的更新。
String payload;
// listen for communication from the ESP8266 and then write it to the serial monitor
while ( ESPserial.available() > 0 ) {
lcd.clear();
//Serial.write( ESPserial.read() );
char c = ESPserial.read();
payload +=c;
}
[...]
lcd.print(payload);
为了控制 LCD 屏幕,将使用 LiquidCrystal 库。对于屏幕的控制,将使用 7、6、4、3 和 8 针脚。有关 LCD 屏幕及其连接的更多信息,请参见下面的示意图。
每次 Arduino Uno 和 ESP8266 启动时,系统都会自动配置为询问下一个 39 总线的剩余时间。如果我想询问下一次 CI2 的剩余时间,您必须按下安装的按钮。这样,Arduino Uno 将通过 SerialPort Tx#11 向 ESP8266 发送一个关键字。这样,ESP8266 知道它必须更改获取条件并请求 CI2 公交车站信息。
最后但并非最不重要的是,每当下一班公交车还剩 5 分钟时,系统都会发出缓冲声音,以免错过下一班公交车。这样,我就可以确定我会到达下一班公共汽车,每个人都很开心!!!
接下来是管理上述逻辑的代码:
void loop()
{
String payload;
// listen for communication from the ESP8266 and then write it to the serial monitor
while ( ESPserial.available() > 0 ) {
lcd.clear();
//Serial.write( ESPserial.read() );
char c = ESPserial.read();
payload +=c;
}
//delay(3000);
// listen for user input and send it to the ESP8266
if ( Serial.available() ) { ESPserial.write( Serial.read() ); }
int sensorVal = digitalRead(PIN_PULSADOR);
// Serial.println(sensorVal);
if (sensorVal != estado_anterior) {
if (sensorVal == HIGH) {
digitalWrite(PIN_LED, LOW);
}
else {
digitalWrite(PIN_LED, HIGH);
ESPserial.write("CI");
if (selbus == 39) {
selbus = 50;
} else {
selbus = 39;
}
//Serial.println("CI");
}
}
if (selbus == 39) {
lcd.home();
lcd.print("El 39 llega en");
} else {
lcd.home();
lcd.print("El CI2 llega en");
}
lcd.setCursor(0,1);
lcd.print(payload);
if (payload[0] == '5') {
tone(12, 440,100);
}
estado_anterior = sensorVal;
}
- Tele-LED舒适休息提醒开源项目
- 植物提醒框开源分享
- 空调提醒开源项目
- 洗衣机洗衣提醒开源硬件
- 嗡嗡声和闪烁的LED显示屏以提醒开源项目
- 灯光提醒开源硬件
- 社交距离提醒开源项目
- COVID 19社交距离提醒开源分享
- CheerUp药物提醒开源分享
- 社交距离提醒(冠状病毒)开源案例
- 开源项目
- 公交车停靠站的快速路出口通行能力模型 14次下载
- 收藏!姿态估计开源项目汇总资料下载
- 新的公交到站时间预测模型 0次下载
- 单片机公交车到站语音播报与液晶显示控制系统的研制 16次下载
- 关于FPGA的开源项目介绍 1161次阅读
- 基于CW32单片机的公交站人流检测系统设计 779次阅读
- 优秀的IC/FPGA开源项目:伪红外图像处理 1949次阅读
- 怎么上手 PR 流程?如何开始参与开源项目? 1470次阅读
- 选择开源项目的重要因素 2122次阅读
- 以后的公交车会是什么样的 1460次阅读
- 全年开源项目的盘点和总结 3231次阅读
- 基于Altium Designer的OSHw开源项目 3609次阅读
- 数字公交站亭系统设计工作原理(ARM7和CPLD架构 ) 1769次阅读
- 手持式公交车信息收集收费装置设计 1192次阅读
- 2018 年 2 月份 GitHub 上最热门的开源项目 4554次阅读
- 开发者不可错过的开源项目—人工智能篇 6184次阅读
- Python机器学习开源项目分析过程中的见解和趋势 703次阅读
- FAST:基于FPGA的SDN交换机开源项目(一) 4531次阅读
- 11个机器学习开源项目 2767次阅读
下载排行
本周
- 1山景DSP芯片AP8248A2数据手册
- 1.06 MB | 532次下载 | 免费
- 2RK3399完整板原理图(支持平板,盒子VR)
- 3.28 MB | 339次下载 | 免费
- 3TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 4DFM软件使用教程
- 0.84 MB | 295次下载 | 免费
- 5元宇宙深度解析—未来的未来-风口还是泡沫
- 6.40 MB | 227次下载 | 免费
- 6迪文DGUS开发指南
- 31.67 MB | 194次下载 | 免费
- 7元宇宙底层硬件系列报告
- 13.42 MB | 182次下载 | 免费
- 8FP5207XR-G1中文应用手册
- 1.09 MB | 178次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33566次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21549次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6656次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537798次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420027次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191187次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183279次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多