全面深入了解STM32ESP8266

一、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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:54
下一篇 2024-12-12 12:55

相關推薦

  • Python應用程序的全面指南

    Python是一種功能強大而簡單易學的編程語言,適用於多種應用場景。本篇文章將從多個方面介紹Python如何應用於開發應用程序。 一、Web應用程序 目前,基於Python的Web…

    編程 2025-04-29
  • Python zscore函數全面解析

    本文將介紹什麼是zscore函數,它在數據分析中的作用以及如何使用Python實現zscore函數,為讀者提供全面的指導。 一、zscore函數的概念 zscore函數是一種用於標…

    編程 2025-04-29
  • 全面解讀數據屬性r/w

    數據屬性r/w是指數據屬性的可讀/可寫性,它在程序設計中扮演着非常重要的角色。下面我們從多個方面對數據屬性r/w進行詳細的闡述。 一、r/w的概念 數據屬性r/w即指數據屬性的可讀…

    編程 2025-04-29
  • Python計算機程序代碼全面介紹

    本文將從多個方面對Python計算機程序代碼進行詳細介紹,包括基礎語法、數據類型、控制語句、函數、模塊及面向對象編程等。 一、基礎語法 Python是一種解釋型、面向對象、動態數據…

    編程 2025-04-29
  • Matlab二值圖像全面解析

    本文將全面介紹Matlab二值圖像的相關知識,包括二值圖像的基本原理、如何對二值圖像進行處理、如何從二值圖像中提取信息等等。通過本文的學習,你將能夠掌握Matlab二值圖像的基本操…

    編程 2025-04-28
  • 瘋狂Python講義的全面掌握與實踐

    本文將從多個方面對瘋狂Python講義進行詳細的闡述,幫助讀者全面了解Python編程,掌握瘋狂Python講義的實現方法。 一、Python基礎語法 Python基礎語法是學習P…

    編程 2025-04-28
  • 全面解析Python中的Variable

    Variable是Python中常見的一個概念,是我們在編程中經常用到的一個變量類型。Python是一門強類型語言,即每個變量都有一個對應的類型,不能無限制地進行類型間轉換。在本篇…

    編程 2025-04-28
  • Zookeeper ACL 用戶 anyone 全面解析

    本文將從以下幾個方面對Zookeeper ACL中的用戶anyone進行全面的解析,並為讀者提供相關的示例代碼。 一、anyone 的作用是什麼? 在Zookeeper中,anyo…

    編程 2025-04-28
  • Python合集符號全面解析

    Python是一門非常流行的編程語言,在其語法中有一些特殊的符號被稱作合集符號,這些符號在Python中起到非常重要的作用。本文將從多個方面對Python合集符號進行詳細闡述,幫助…

    編程 2025-04-28
  • Switchlight的全面解析

    Switchlight是一個高效的輕量級Web框架,為開發者提供了簡單易用的API和豐富的工具,可以快速構建Web應用程序。在本文中,我們將從多個方面闡述Switchlight的特…

    編程 2025-04-28

發表回復

登錄後才能評論