一、STM32ESP8266傳輸數據
#include <ESP8266WiFi.h> const char* ssid = "WiFi網路名稱"; const char* password = "WiFi網路密碼"; void setup() { Serial.begin(9600); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("連接WiFi中..."); } Serial.println("WiFi連接成功!"); } void loop() { Serial.print("發送消息: "); Serial.println("hello IoT"); WiFiClient client; const int serverPort = 80; if (!client.connect("伺服器IP地址", serverPort)) { Serial.println("連接伺服器失敗"); return; } client.print("GET /hello?msg=hello IoT HTTP/1.1\r\n"); client.print("Host: 伺服器域名\r\n"); client.print("\r\n"); Serial.println("消息已發送"); delay(10000); }
上面的代碼展示了如何使用ESP8266模塊連接WiFi網路,並發送數據到HTTP伺服器,其中包括WiFi的連接和伺服器的通信,使用WiFi庫和WiFiClient實現。
二、STM32ESP8266一直在閃藍光
當ESP8266模塊一直閃爍藍色LED時,說明模塊正在執行重要的任務,比如連接WiFi或者OTA升級等,這是正常現象,不需過多擔心。
三、STM32ESP8266接收圖片
#include <ESP8266WiFi.h> #include <WiFiUdp.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include <Adafruit_Sensor.h> #include <Adafruit_BMP280.h> const char* ssid = "WiFi網路名稱"; const char* password = "WiFi網路密碼"; WiFiUDP udp; Adafruit_SSD1306 display(-1); Adafruit_BMP280 bmp; void setup() { Serial.begin(9600); //連接WiFi WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("連接WiFi中..."); } //初始化OLED顯示屏 display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay(); display.setTextColor(WHITE); //初始化BMP280感測器 if (!bmp.begin(0x76)) { Serial.println("未檢測到合適的BMP280感測器"); while (1); } } void loop() { //接收從UDP伺服器發送過來的數據 char packetBuffer[255]; int packetSize = udp.parsePacket(); if (packetSize) { IPAddress remote = udp.remoteIP(); int port = udp.remotePort(); Serial.print("從IP "); Serial.print(remote); Serial.print(":"); Serial.print(port); Serial.print("接收到"); Serial.print(packetSize); Serial.println("的位元組"); //從數據中解析出圖片信息,並在OLED顯示屏上顯示 udp.read(packetBuffer, 255); display.display(); display.clearDisplay(); bmp.setSampling(Adafruit_BMP280::MODE_NORMAL, Adafruit_BMP280::SAMPLING_X1, Adafruit_BMP280::SAMPLING_X1, Adafruit_BMP280::SAMPLING_X1, Adafruit_BMP280::FILTER_OFF); display.setCursor(0, 0); display.print("溫度: "); display.print(bmp.readTemperature()); display.println("*C"); display.print("濕度: "); display.print(bmp.readHumidity()); display.println("%"); display.print("氣壓: "); display.print(bmp.readPressure() / 100.0F); display.println("hPa"); display.display(); } delay(1000); }
上述代碼演示了ESP8266模塊如何接收從UDP伺服器發送過來的圖片信息,並將其解析展示在OLED顯示屏上。使用WiFi庫、WiFiUDP庫、Adafruit_GFX庫、Adafruit_SSD1306庫、Adafruit_Sensor庫和Adafruit_BMP280庫。
四、STM32ESP8266開發流程
ESP8266要使用Arduino IDE進行開發,需要先安裝ESP8266的開發環境,然後通過USB連接ESP8266模塊。使用Arduino IDE進行編程,上傳代碼到ESP8266模塊即可。
五、STM32ESP8266控制LED燈
#include <ESP8266WiFi.h> const char* ssid = "WiFi網路名稱"; const char* password = "WiFi網路密碼"; void setup() { pinMode(D0, OUTPUT); //設置LED燈的GPIO引腳為輸出模式 Serial.begin(9600); //連接WiFi WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("連接WiFi中..."); } Serial.println("WiFi連接成功"); } void loop() { digitalWrite(D0, HIGH); //控制LED燈的GPIO引腳輸出高電平 delay(1000); digitalWrite(D0, LOW); //控制LED燈的GPIO引腳輸出低電平 delay(1000); }
上述代碼演示了ESP8266模塊如何控制LED燈的開關,使用WiFi庫,通過設置GPIO引腳的電平變化實現LED燈的控制。
六、STM32ESP8266連接OneNet
#include <SoftwareSerial.h> SoftwareSerial espSerial(2, 3); //軟串口連接ESP8266的RX和TX引腳 String apiKey = "OneNet中的API Key"; String deviceId = "OneNet中的設備ID"; void setup() { Serial.begin(9600); espSerial.begin(9600); Serial.println("正在連接OneNet..."); //連接OneNet,發送AT指令到ESP8266模塊 sendAT("AT+CIPMUX=0"); sendAT("AT+CIPMODE=1"); sendAT("AT+CIPSTART=\"TCP\",\"api.heclouds.com\",80"); Serial.println("OneNet連接成功!"); } void loop() { //上傳數據到OneNet String data = "{\"datastreams\":[{\"id\":\"temperature\",\"datapoints\":[{\"value\":\"20\"}]},{\"id\":\"humidity\",\"datapoints\":[{\"value\":\"50\"}]}]}"; String postCmd = "POST /devices/" + deviceId + "/datapoints HTTP/1.1\r\n" + "api-key: " + apiKey + "\r\n" + "Host: api.heclouds.com\r\n" + "Content-Length: " + data.length() + "\r\n" + "Content-Type: application/json\r\n\r\n" + data + "\r\n"; sendAT("AT+CIPSEND=" + String(postCmd.length() + 2)); sendAT(postCmd); delay(10000); //10秒上傳一次數據 } void sendAT(String cmd) { espSerial.print(cmd + "\r\n"); Serial.print(cmd + "\r\n"); delay(500); while (espSerial.available()) { Serial.write(espSerial.read()); } }
上述代碼演示了如何通過ESP8266模塊實現和OneNet雲平台的連接,並向OneNet上傳數據,使用SoftwareSerial庫和AT指令。
七、STM32ESP8266連接阿里雲
#include <ESP8266WiFi.h> #include <MQTTClient.h> const char* ssid = "WiFi網路名稱"; const char* password = "WiFi網路密碼"; const char* aliServer = "阿里雲地址"; const int aliPort = 1883; const char* aliUser = "阿里雲用戶名"; const char* aliPassword = "阿里雲密碼"; const char* clientId = "客戶端ID"; WiFiClient wifiClient; MQTTClient mqttClient; void setup() { Serial.begin(9600); //連接WiFi WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("連接WiFi中..."); } mqttClient.begin(aliServer, aliPort, wifiClient); mqttClient.connect(clientId, aliUser, aliPassword); while (!mqttClient.connected()) { Serial.println("阿里雲連接失敗,正在重試..."); delay(5000); mqttClient.connect(clientId, aliUser, aliPassword); } Serial.println("阿里雲連接成功"); } void loop() { mqttClient.loop(); if (mqttClient.connected()) { String data = "{\"msg\":\"Hello Aliyun!\"}"; mqttClient.publish("阿里雲主題", data); delay(5000); } }
上述代碼演示了ESP8266如何連接阿里雲,並發布數據到阿里雲。使用WiFi庫和MQTTClient庫。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/243179.html