#include <ESP8266WiFi.h> #include <PubSubClient.h> #include <DHT.h> #include <Servo.h> #include <SoftwareSerial.h>

// WiFi信息 const char* ssid = 'HONOR Play4T'; const char* password = '12345678';

// OneNet信息 const char* server = 'mqtt.heclouds.com'; const int port = 6002; const char* deviceId = '1099655073'; const char* apiKey = 'L=ljQ23ELQoOmTvhDGkFKnMZ77E='; const char* topicPub = '/topicPub'; const char* topicSub = '/topicSub';

// 温湿度传感器信息 #define DHTPIN 4 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); float tempC; float humid;

// 伺服舵机信息 Servo myservo; int servoPos = 0;

//esp8266 SoftwareSerial myserial(3,2); WiFi wifi(myserial);

// MQTT客户端 WiFiClientSecure espClient; PubSubClient client(espClient);

// 连接WiFi和MQTT void setup_wifi_mqtt() { 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()); espClient.setInsecure(); client.setServer(server, port); }

// 湿温度传感器初始化 void setup_sensors() { dht.begin(); }

// 获取湿温度 void get_sensors() { tempC = dht.readTemperature(); humid = dht.readHumidity(); Serial.print('Temperature: '); Serial.print(tempC); Serial.println(' *C'); Serial.print('Humidity: '); Serial.print(humid); Serial.println(' %'); }

// 连接OneNet并上传数据 void connect_onenet() { if (!client.connected()) { Serial.print('Connecting to OneNet...'); String clientId = 'ESP8266Client-'; clientId += String(random(0xffff), HEX); if (client.connect(clientId.c_str(), deviceId, apiKey)) { Serial.println('connected'); String payload = '{'datastreams':[{{'id':'temperature','datapoints':[{'value':''; payload += String(tempC); payload += ''}]}},{{'id':'humidity','datapoints':[{'value':''; payload += String(humid); payload += ''}]}}]}'; client.publish(topicPub, payload.c_str()); } else { Serial.print('failed, rc='); Serial.print(client.state()); Serial.println(' retrying in 5 seconds'); delay(5000); } } client.loop(); }

// 订阅命令并控制舵机 void subscribe_control() { client.subscribe(topicSub); client.setCallback([](char* topic, byte* payload, unsigned int length) { String command = ''; for (int i = 0; i < length; i++) { command += (char)payload[i]; } Serial.print('Received command: '); Serial.println(command); if (command == '0') { servoPos = 0; } else if (command == '1') { servoPos = 180; } else { servoPos = 0; } myservo.write(servoPos); }); }

void setup() { Serial.begin(9600); setup_wifi_mqtt(); setup_sensors(); myservo.attach(7); }

void loop() { get_sensors(); connect_onenet(); subscribe_control(); delay(1000);

ESP8266 温湿度传感器数据采集并上传至OneNet,并控制舵机

原文地址: https://www.cveoy.top/t/topic/oLUP 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录