Mqtt + Oled

Mqtt通訊+Oled顯示器通訊測試

軟件

  1. arduino ide
  2. mosquitto(消息服務(wù)器)

硬件

  1. esp32 (自行淘寶)
  2. ssd1306 oled (自行淘寶)

需要用到的庫文件

PubSubClient(mqtt客戶端庫)
U8g2(oled驅(qū)動(dòng)庫)

代碼

#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();
}

測試

打開終端,輸入

mosquitto_pub -t inTopic -m "hello world"

前提是保證你的mosquitto服務(wù)正確安裝并且已經(jīng)開啟
沒有開啟?
終端輸入

sudo service mosquitto start

測試環(huán)境為Linux

問題

  1. 如何安裝esp32 的 arduino ide 開發(fā)環(huán)境?
    軟件地址: https://github.com/espressif/arduino-esp32
  2. mqtt
    軟件地址:http://mosquitto.org
  3. 說明
    關(guān)于以上問題無法解決請自行百度,本教程只提供思路。
    代碼上盡我可能的保證簡單純粹

結(jié)果演示


可以看到esp32已經(jīng)收到消息并顯示出來了


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,174評論 25 708
  • 太長了,還是轉(zhuǎn)載吧...今天在看博客的時(shí)候,無意中發(fā)現(xiàn)了@Trinea在GitHub上的一個(gè)項(xiàng)目Android開源...
    龐哈哈哈12138閱讀 20,394評論 3 283
  • 早上起來就看到你發(fā)的消息,跟朋友走在路邊,清冷的秋風(fēng)夾著桂花香襲來,你提起柳永的《望海潮》,有三秋桂子,十里荷花,...
    利萍閱讀 172評論 0 1
  • --你的話太多了 ???
    咸叔說閱讀 467評論 0 1
  • 在生命的 每一次輪回中 我破開污泥 洗凈顏面 聽風(fēng)聲起落 讀人間百變 看路過的人千千萬 任歲月延續(xù)了數(shù)百年 婀...
    閬苑寒梅閱讀 282評論 0 0

友情鏈接更多精彩內(nèi)容