資料介紹
描述
每個人都討厭失去一輛公共汽車,并在手機上安裝無用的應用程序,而這些應用程序是您一生中要使用一次的。為了解決這個問題,我開發了一個新系統,它會在下一班公交車到達時詢問 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次下載 | 免費
評論
查看更多