Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Arduino.h>
- #include <Wire.h>
- #include <Adafruit_Sensor.h>
- #include <Adafruit_BME280.h>
- #include <ESP8266WiFi.h>
- #include <Ticker.h>
- #include <AsyncMqttClient.h>
- #define SEALEVELPRESSURE_HPA (1013.25)
- #define WIFI_SSID "??????????"
- #define WIFI_PASSWORD "????????????"
- // Raspberri Pi Mosquitto MQTT Broker
- #define MQTT_HOST IPAddress(192, 168, 42,200)
- #define MQTT_PORT 1883
- // Temperature MQTT Topics
- #define MQTT_PUB_TEMP "esp/bme280/temperature"
- #define MQTT_PUB_HUM "esp/bme280/humidity"
- #define MQTT_PUB_PRES "esp/bme280/pressure"
- // BME280 I2C
- Adafruit_BME280 bme;
- // Variables to hold sensor readings
- float temp;
- float hum;
- float pres;
- AsyncMqttClient mqttClient;
- Ticker mqttReconnectTimer;
- WiFiEventHandler wifiConnectHandler;
- WiFiEventHandler wifiDisconnectHandler;
- Ticker wifiReconnectTimer;
- void connectToWifi() {
- Serial.println("Connecting to Wi-Fi...");
- WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
- }
- void connectToMqtt() {
- Serial.println("Connecting to MQTT...");
- mqttClient.connect();
- }
- void onWifiConnect(const WiFiEventStationModeGotIP& event) {
- Serial.println("Connected to Wi-Fi.");
- connectToMqtt();
- }
- void onWifiDisconnect(const WiFiEventStationModeDisconnected& event) {
- Serial.println("Disconnected from Wi-Fi.");
- mqttReconnectTimer.detach(); // ensure we don't reconnect to MQTT while reconnecting to Wi-Fi
- wifiReconnectTimer.once(2, connectToWifi);
- }
- void onMqttConnect(bool sessionPresent) {
- Serial.println("Connected to MQTT.");
- Serial.print("Session present: ");
- Serial.println(sessionPresent);
- }
- void onMqttDisconnect(AsyncMqttClientDisconnectReason reason) {
- Serial.println("Disconnected from MQTT.");
- if (WiFi.isConnected()) {
- mqttReconnectTimer.once(2, connectToMqtt);
- }
- }
- void onMqttPublish(uint16_t packetId) {
- Serial.print("Publish acknowledged.");
- Serial.print(" packetId: ");
- Serial.println(packetId);
- }
- void setup() {
- Serial.begin(115200);
- Serial.println();
- // Initialize BME280 sensor
- if (!bme.begin(0x76)) {
- Serial.println("Could not find a valid BME280 sensor, check wiring!");
- while (1);
- }
- wifiConnectHandler = WiFi.onStationModeGotIP(onWifiConnect);
- wifiDisconnectHandler = WiFi.onStationModeDisconnected(onWifiDisconnect);
- mqttClient.onConnect(onMqttConnect);
- mqttClient.onDisconnect(onMqttDisconnect);
- mqttClient.onPublish(onMqttPublish);
- mqttClient.setServer(MQTT_HOST, MQTT_PORT);
- connectToWifi();
- delay(500);
- connectToMqtt();
- temp = 1.8*bme.readTemperature() + 32;
- hum = bme.readHumidity();
- pres = bme.readPressure()/100.0F;
- // Publish an MQTT message on topic esp/bme280/temperature
- uint16_t packetIdPub1 = mqttClient.publish(MQTT_PUB_TEMP, 1, true, String(temp).c_str());
- Serial.printf("Publishing on topic %s at QoS 1, packetId: %i ", MQTT_PUB_TEMP, packetIdPub1);
- Serial.printf("Message: %.2f \n", temp);
- // Publish an MQTT message on topic esp/bme280/humidity
- uint16_t packetIdPub2 = mqttClient.publish(MQTT_PUB_HUM, 1, true, String(hum).c_str());
- Serial.printf("Publishing on topic %s at QoS 1, packetId: %i ", MQTT_PUB_HUM, packetIdPub2);
- Serial.printf("Message: %.2f \n", hum);
- // Publish an MQTT message on topic esp/bme280/pressure
- uint16_t packetIdPub3 = mqttClient.publish(MQTT_PUB_PRES, 1, true, String(pres).c_str());
- Serial.printf("Publishing on topic %s at QoS 1, packetId: %i ", MQTT_PUB_PRES, packetIdPub3);
- Serial.printf("Message: %.3f \n", pres);
- Serial.println("I'm awake, but I'm going into deep sleep mode for 30 seconds");
- ESP.deepSleep(30e6);
- }
- void loop(){
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement