电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示
电子发烧友网>电子资料下载>电子资料>公交到站提醒开源项目

公交到站提醒开源项目

2022-12-21 | zip | 0.42 MB | 次下载 | 免费

资料介绍

描述

每个人都讨厌失去一辆公共汽车,并在手机上安装无用的应用程序,而这些应用程序是您一生中要使用一次的。为了解决这个问题,我开发了一个新系统,它会在下一班公交车到达时询问 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、标头和参数)是否正确。您可以在下图中看到一个示例:

 
poYBAGOSxT-AUzZSAADgLqAO8-E349.png
邮递员 API GET 示例
 

ArudinoJson Library(版本 6)提供在线助手。这样,如果您引入响应示例,它会生成用于序列化或解析 JSON 的代码。您可以在此链接中找到此助手:

https://arduinojson.org/v6/assistant/

 

 
poYBAGOhKrmAFExsAACtDiZxJLc289.png
解析和序列化程序示例
 

因此,如果您介绍 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;
}

下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1山景DSP芯片AP8248A2数据手册
  2. 1.06 MB  |  532次下载  |  免费
  3. 2RK3399完整板原理图(支持平板,盒子VR)
  4. 3.28 MB  |  339次下载  |  免费
  5. 3TC358743XBG评估板参考手册
  6. 1.36 MB  |  330次下载  |  免费
  7. 4DFM软件使用教程
  8. 0.84 MB  |  295次下载  |  免费
  9. 5元宇宙深度解析—未来的未来-风口还是泡沫
  10. 6.40 MB  |  227次下载  |  免费
  11. 6迪文DGUS开发指南
  12. 31.67 MB  |  194次下载  |  免费
  13. 7元宇宙底层硬件系列报告
  14. 13.42 MB  |  182次下载  |  免费
  15. 8FP5207XR-G1中文应用手册
  16. 1.09 MB  |  178次下载  |  免费

本月

  1. 1OrCAD10.5下载OrCAD10.5中文版软件
  2. 0.00 MB  |  234315次下载  |  免费
  3. 2555集成电路应用800例(新编版)
  4. 0.00 MB  |  33566次下载  |  免费
  5. 3接口电路图大全
  6. 未知  |  30323次下载  |  免费
  7. 4开关电源设计实例指南
  8. 未知  |  21549次下载  |  免费
  9. 5电气工程师手册免费下载(新编第二版pdf电子书)
  10. 0.00 MB  |  15349次下载  |  免费
  11. 6数字电路基础pdf(下载)
  12. 未知  |  13750次下载  |  免费
  13. 7电子制作实例集锦 下载
  14. 未知  |  8113次下载  |  免费
  15. 8《LED驱动电路设计》 温德尔著
  16. 0.00 MB  |  6656次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935054次下载  |  免费
  3. 2protel99se软件下载(可英文版转中文版)
  4. 78.1 MB  |  537798次下载  |  免费
  5. 3MATLAB 7.1 下载 (含软件介绍)
  6. 未知  |  420027次下载  |  免费
  7. 4OrCAD10.5下载OrCAD10.5中文版软件
  8. 0.00 MB  |  234315次下载  |  免费
  9. 5Altium DXP2002下载入口
  10. 未知  |  233046次下载  |  免费
  11. 6电路仿真软件multisim 10.0免费下载
  12. 340992  |  191187次下载  |  免费
  13. 7十天学会AVR单片机与C语言视频教程 下载
  14. 158M  |  183279次下载  |  免费
  15. 8proe5.0野火版下载(中文版免费下载)
  16. 未知  |  138040次下载  |  免费