Mqtt通訊+Oled顯示器通訊測(cè)試
軟件
- arduino ide
- mosquitto(消息服務(wù)器)
硬件
- esp32 (自行淘寶)
- ssd1306 oled (自行淘寶)
需要用到的庫(kù)文件
PubSubClient(mqtt客戶端庫(kù))
U8g2(oled驅(qū)動(dòng)庫(kù))
代碼
#include <WiFi.h>
#include <PubSubClient.h>
#include <Arduino.h>
#include <U8g2lib.h>
#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);
const char* ssid = "wifi";
const char* password = "xiaog123";
WiFiClient espClient;
PubSubClient client(espClient);
void reconnect() {
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
if (client.connect("arduinoClient")) {
Serial.println("connected");
client.publish("outTopic", "hello world");
// 訂閱 inTopic 頻道
client.subscribe("inTopic");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
// 回調(diào)函數(shù)
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
char arr[length];
for (int i = 0; i < length; i++) {
arr[i] = (unsigned char)payload[i];
Serial.print(arr[i]);
}
// 在結(jié)果數(shù)組中加入'\0'作為結(jié)束符秦陋,否則結(jié)果數(shù)組結(jié)尾將亂碼
arr[length] = '\0';
Serial.println();
// 顯示到oled屏幕上
u8g2.firstPage();
do {
u8g2.setFont(u8g2_font_ncenB10_tr);
u8g2.drawStr(0, 50, arr);
} while (u8g2.nextPage());
}
void setup() {
u8g2.begin();
Serial.begin(115200);
delay(10);
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
// 設(shè)置mqtt服務(wù)器地址以及端口
client.setServer("192.168.31.105", 1883);
// 設(shè)置回調(diào)函數(shù)
client.setCallback(callback);
}
void loop() {
// mqtt 斷線重連
if (!client.connected()) {
reconnect();
}
client.loop();
}
測(cè)試
打開(kāi)終端理疙,輸入
mosquitto_pub -t inTopic -m "hello world"
前提是保證你的mosquitto服務(wù)正確安裝并且已經(jīng)開(kāi)啟
沒(méi)有開(kāi)啟鹰晨?
終端輸入
sudo service mosquitto start
測(cè)試環(huán)境為L(zhǎng)inux
問(wèn)題
- 如何安裝esp32 的 arduino ide 開(kāi)發(fā)環(huán)境絮供?
軟件地址: https://github.com/espressif/arduino-esp32 - mqtt
軟件地址:http://mosquitto.org - 說(shuō)明
關(guān)于以上問(wèn)題無(wú)法解決請(qǐng)自行百度,本教程只提供思路。
代碼上盡我可能的保證簡(jiǎn)單純粹
結(jié)果演示
可以看到esp32已經(jīng)收到消息并顯示出來(lái)了