[實驗]Nodemcu軟串列埠通訊(讀取網路時間並通過串列埠傳輸)
阿新 • • 發佈:2021-07-13
參考部落格:ESP8266(NODEMCU)Arduino環境下實現多個軟串列埠通訊
接線方式:
D5——D8
D6——D7
實驗原理與步驟
通過向硬串列埠傳送Show time 字串啟用微控制器去更新網路時間,然後通過軟串列埠一發出,然後硬串列埠會打出串列埠二接收到的資料。模擬了兩個微控制器實現串列埠通訊的過程。
程式碼
#include <NTPClient.h> #include <ESP8266WiFi.h> #include <WiFiUdp.h> #include <SoftwareSerial.h> SoftwareSerial uart1(14,12);//RX=d5,TX=d6 SoftwareSerial uart2(13,15);//RX=d7,TX=d8 //ESP8266 NODEMCU const char *ssid = "your wifi name "; const char *password = "your wifi password"; WiFiUDP ntpUDP; NTPClient timeClient(ntpUDP, "ntp1.aliyun.com",60*60*8, 30*60*1000); void setup() { Serial.begin(9600); uart1.begin(9600); uart2.begin(9600); uart1.listen(); uart2.listen(); pinMode(LED_BUILTIN, OUTPUT); // Initialize the LED_BUILTIN pin as an output WiFi.begin(ssid, password); while ( WiFi.status() != WL_CONNECTED ) { delay ( 500 ); Serial.print ( "." ); digitalWrite(LED_BUILTIN, HIGH); } timeClient.begin(); } String time1=""; bool dian=false; int h,m,s,d; String uart1string=""; String uart2string=""; void loop() { if(Serial.available()>0){ if(Serial.peek()!='\n'){ uart1string+=(char)Serial.read(); } else{ Serial.read(); if(uart1string=="Show time"){ timeClient.update(); time1=timeClient.getFormattedTime(); uart1.println(time1); } uart1string=""; } } if(uart2.available()>0){ if(uart2.peek()!='\n'){ uart2string+=(char)uart2.read(); } else{ uart2.read(); Serial.print("UART2 DATA:"); Serial.println(uart2string); uart2.println(uart2string); } } /*Serial.println("ok"); timeClient.update(); time1=timeClient.getFormattedTime(); d=timeClient.getDay(); h=timeClient.getHours(); m=timeClient.getMinutes(); s=timeClient.getSeconds(); Serial.print(d);Serial.print(" ");Serial.print(h);Serial.print(":");Serial.print(m);Serial.print(":");Serial.println(s); delay(1000);*/ }