/* combined Ger's sketch ESP32 BME280 sketch and library ArduinoMqttClient - example "WiFi Simple Receive" */ #include #include #include #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 #define OLED_ADDR 0x3C #include #if defined(ARDUINO_SAMD_MKRWIFI1010) || defined(ARDUINO_SAMD_NANO_33_IOT) || defined(ARDUINO_AVR_UNO_WIFI_REV2) #include #elif defined(ARDUINO_SAMD_MKR1000) #include #elif defined(ARDUINO_ARCH_ESP8266) #include #elif defined(ARDUINO_PORTENTA_H7_M7) || defined(ARDUINO_NICLA_VISION) || defined(ARDUINO_ARCH_ESP32) || defined(ARDUINO_GIGA) || defined(ARDUINO_OPTA) #include #elif defined(ARDUINO_PORTENTA_C33) #include #elif defined(ARDUINO_UNOR4_WIFI) #include #endif #include "secrets.h" ///////please enter your sensitive data in the Secret tab/arduino_secrets.h char ssid[] = SECRET_SSID; // your network SSID (name) char pass[] = SECRET_PASS; // your network password (use for WPA, or use as key for WEP) // To connect with SSL/TLS: // 1) Change WiFiClient to WiFiSSLClient. // 2) Change port value from 1883 to 8883. // 3) Change broker value to a server with a known SSL/TLS root certificate // flashed in the WiFi module. // initiate the display object Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); WiFiClient wifiClient; MqttClient mqttClient(wifiClient); const char broker[] = SECRET_BROKER; //"test.mosquitto.org"; int port = SECRET_PORT; //1883; const char topic[] = SECRET_TOPIC; //"arduino/simple"; //SECRET_USER ?? //SECRET_PSK ?? //i2c bus are in pins GPIO6, and GPIO7 void setup() { // ESP32 pins for i2c bus Wire.begin(6, 7); //Initialize serial and wait for port to open: Serial.begin(9600); // OLED init if (!display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR)) { Serial.println("SSD1306 init failed"); while (1); } display.clearDisplay(); display.setTextColor(SSD1306_WHITE); display.setTextSize(1); display.setCursor(0, 0); while (!Serial) { ; // wait for serial port to connect. Needed for native USB port only } // attempt to connect to WiFi network: /*Serial.print("Attempting to connect to WPA SSID: "); display.display(); display.print("Connecting..."); Serial.println(ssid); while (WiFi.begin(ssid, pass) != WL_CONNECTED) { // failed, retry Serial.print("."); display.print("."); display.display(); delay(5000); }*/ WiFi.begin(ssid, pass); Serial.print("Connecting to WiFi"); display.print("Connecting"); display.display(); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); display.print("."); display.display(); } display.clearDisplay(); display.setTextColor(SSD1306_WHITE); display.setTextSize(1); display.setCursor(0, 0); display.print("Connected!"); display.display(); Serial.println("You're connected to the network"); Serial.println(); // You can provide a unique client ID, if not set the library uses Arduino-millis() // Each client must have a unique client ID // mqttClient.setId("clientId"); // You can provide a username and password for authentication // mqttClient.setUsernamePassword("username", "password"); mqttClient.setUsernamePassword(SECRET_USER, SECRET_PSK); Serial.print("Attempting to connect to the MQTT broker: "); Serial.println(broker); display.clearDisplay(); display.setTextColor(SSD1306_WHITE); display.setTextSize(1); display.setCursor(0, 0); display.print("Connecting to MQTT"); display.display(); if (!mqttClient.connect(broker, port)) { Serial.print("MQTT connection failed! Error code = "); Serial.println(mqttClient.connectError()); display.clearDisplay(); display.setTextColor(SSD1306_WHITE); display.setTextSize(1); display.setCursor(0, 0); display.print("Couldn't connect to MQTT :("); display.display(); while (1); } Serial.println("You're connected to the MQTT broker!"); Serial.println(); Serial.print("Subscribing to topic: "); Serial.println(topic); Serial.println(); // subscribe to a topic mqttClient.subscribe(topic); // topics can be unsubscribed using: // mqttClient.unsubscribe(topic); Serial.print("Waiting for messages on topic: "); Serial.println(topic); Serial.println(); display.clearDisplay(); display.setTextColor(SSD1306_WHITE); display.setTextSize(1); display.setCursor(0, 0); display.print("Connected to MQTT, topic: "); display.print(topic); display.print("."); display.display(); } void loop() { int messageSize = mqttClient.parseMessage(); /*if (messageSize) { // we received a message, print out the topic and contents Serial.print("Received a message with topic '"); Serial.print(mqttClient.messageTopic()); Serial.print("', length "); Serial.print(messageSize); Serial.println(" bytes:"); // use the Stream interface to print the contents while (mqttClient.available()) { Serial.print((char)mqttClient.read()); } Serial.println(); }*/ if (messageSize) { String message = ""; while (mqttClient.available()) { char c = (char)mqttClient.read(); message += c; } Serial.println(message); // Display message display.clearDisplay(); display.setCursor(0, 0); display.setTextSize(1); display.println("MQTT Msg:"); display.println(message); display.display(); } }