一、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-hk/n/243179.html
微信掃一掃
支付寶掃一掃