esp8266+esp32上传数据到ThingsBoard

作者 by 超米 / 2024-12-04 / 暂无评论 / 109 个足迹

esp8266.txt

    //esp32S3
#include <WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
#include <DHT.h>

#define DHTPIN 2    
#define DHTTYPE DHT11  


DHT dht(DHTPIN, DHTTYPE);

// WiFi credentials
const char* ssid = "你自己的wifi";
const char* password = "密码";

// MQTT Server
const char* mqtt_server = "101.43.91.185";
const int mqtt_port = 1883;

// MQTT Client IDs
const char* client_id = "你设备的id";

// MQTT Username and Password (if required)
const char* mqtt_user = "设备用户名";
const char* mqtt_password = "设备密码";

// MQTT Topics
const char* topic_rpc = "v1/devices/me/rpc/request/+";
const char* topic_telemetry = "v1/devices/me/telemetry";

// WiFi Client
WiFiClient espClient;

// MQTT Clients
PubSubClient client(espClient);

// GPIO pin for LED
const int ledPin = 4;

void setup_wifi() {
    delay(10);
    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());
}

void callback(char* topic, byte* payload, unsigned int length) {
   
    Serial.print("Message arrived [");
    Serial.print(topic);
    Serial.print("] ");
    for (int i = 0; i < length; i++) {
        Serial.print((char)payload[i]);
    }
    Serial.println();

    String message = "";
    for (int i = 0; i < length; i++) {
        message += (char)payload[i];
    }

    StaticJsonDocument<200> doc;
    DeserializationError error = deserializeJson(doc, message);

    if (!error) {
        const char* method = doc["method"];
        if (strcmp(method, "setIO") == 0) {
            bool params = doc["params"];
            digitalWrite(ledPin, params ? HIGH : LOW);
            Serial.println(params ? "LED ON" : "LED OFF");
        }
    } else {
        Serial.print(F("deserializeJson() failed: "));
        Serial.println(error.f_str());
    }
}


void publishTemperature() {
    float temperature = dht.readTemperature();再再
    if (isnan(temperature)) {
        Serial.println("Failed to read from DHT sensor!");
        return;
    }

    StaticJsonDocument<200> doc;
    doc["temperature"] = temperature;

    char jsonBuffer[200];
    serializeJson(doc, jsonBuffer);

    client_dht.publish(topic_telemetry, jsonBuffer);
    Serial.print("Published temperature: ");
    Serial.println(temperature);
}

void reconnect() {
    while (!client.connected()) {
        Serial.print("Attempting MQTT connection for test client...");
        if (client.connect(client_id, mqtt_user, mqtt_password)) {
            Serial.println("connected");
            client.subscribe(topic_rpc);
        } else {
            Serial.print("failed, rc=");
            Serial.print(client.state());
            Serial.println(" try again in 5 seconds");
            delay(5000);
        }
    }
}

void setup() {
    pinMode(ledPin, OUTPUT);
    pinMode(chumo, INPUT);
    digitalWrite(ledPin, LOW);

    Serial.begin(115200);
    setup_wifi();

    client.setServer(mqtt_server, mqtt_port);
    client.setCallback(callback);
}

void loop() {
    if (!client.connected()) {
        reconnect();
    }
    
    client.loop();
   static unsigned long lastMillis = 0;
    if (millis() - lastMillis >= 2000) {
        lastMillis = millis();
        publishTemperature();
    }
}







esp32.txt

独特见解