Mqtt + Oled

Mqtt通讯+Oled显示器通讯测试

软件

  1. arduino ide
  2. mosquitto(消息服务器)

硬件

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

需要用到的库文件

PubSubClient(mqtt客户端库)
U8g2(oled驱动库)

代码

#include 
#include 


#include 
#include 

#ifdef U8X8_HAVE_HW_SPI
#include 
#endif
#ifdef U8X8_HAVE_HW_I2C
#include 
#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);
    }
  }
}
// 回调函数
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]);
  }
  // 在结果数组中加入'\0'作为结束符,否则结果数组结尾将乱码
  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());
  // 设置mqtt服务器地址以及端口
  client.setServer("192.168.31.105", 1883);
  // 设置回调函数
  client.setCallback(callback);
}

void loop() {
 // mqtt 断线重连
  if (!client.connected()) {
    reconnect();
  }
  client.loop();
}

测试

打开终端,输入

mosquitto_pub -t inTopic -m "hello world"

前提是保证你的mosquitto服务正确安装并且已经开启
没有开启?
终端输入

sudo service mosquitto start

测试环境为Linux

问题

  1. 如何安装esp32 的 arduino ide 开发环境?
    软件地址: https://github.com/espressif/arduino-esp32
  2. mqtt
    软件地址:http://mosquitto.org
  3. 说明
    关于以上问题无法解决请自行百度,本教程只提供思路。
    代码上尽我可能的保证简单纯粹

结果演示


可以看到esp32已经收到消息并显示出来了


Mqtt + Oled_第1张图片

你可能感兴趣的:(Mqtt + Oled)