需要在代码中添加舵机控制的部分,具体实现方式取决于舵机的控制方式,以下是一种示例代码:

#include <WiFi.h> #include "DHT.h" #include "PubSubClient.h" #include "Ticker.h" #include <Servo.h> //添加舵机库 #define DHTPIN 7
#define DHTTYPE DHT11 // DHT 11 DHT dht(DHTPIN, DHTTYPE); int god=0; const int led =18; //灯的接口 const int servoPin = 19; //舵机的接口 Servo myservo; //创建舵机对象 const char *ssid = "3671"; //wifi名称 const char *password = "05210835";//wifi密码 const char *mqtt_server = "183.230.40.96"; //onenet 的 IP地址 const int port = 6002; //端口号 #define mqtt_devid "884337606" //设备ID #define mqtt_pubid "487632" //产品ID //鉴权信息 #define mqtt_password "20222222" //鉴权信息 WiFiClient espClient; //创建一个WIFI连接客户端 PubSubClient client(espClient); // 创建一个PubSub客户端, 传入创建的WIFI客户端 char msg_buf[200]; //发送信息缓冲区 char msgJson[75]; //要发送的json格式的数据 unsigned short json_len = 0; //json长度 //信息模板 char dataTemplate[] = "{"temp":%.2f,"humi":%.2f,"led":%d}"; // temp humi要与onenet相对应 Ticker tim1; //定时器,用来循环上传数据

void setupWifi(){ WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("正在连接中----\n"); } Serial.print("WIFI已连接\n"); Serial.print(WiFi.localIP()); }

void setup() { Serial.begin(115200); pinMode(led,OUTPUT);//输出 myservo.attach(servoPin); //舵机绑定到指定接口 setupWifi(); //调用函数连接WIFI Serial.print(F("DHT11 test!")); dht.begin();
client.setServer(mqtt_server, port); //设置客户端连接的服务器,连接Onenet服务器, 使用6002端口 client.connect(mqtt_devid, mqtt_pubid, mqtt_password); //客户端连接到指定的产品的指定设备.同时输入鉴权信息 if (client.connected()){ Serial.print("OneNet is connected!");//判断以下是不是连好了. } //client.setCallback(callback); //设置好客户端收到信息是的回调 client.setCallback(callback); //订阅命令下发主题 tim1.attach(5, sendTempAndHumi); //定时每5秒调用一次发送数据函数 }

void loop() { delay(5000); float h = dht.readHumidity(); float t = dht.readTemperature(); float f = dht.readTemperature(true); if (isnan(h) || isnan(t) || isnan(f)) { Serial.println(F("Failed to read from DHT sensor!\n")); return; } //可以让我们通过串口查看数据 Serial.print(F("Humidity: "));
Serial.print(h); Serial.print(F("% Temperature: ")); Serial.print(t); Serial.print(F("℃ \n ")); if (!WiFi.isConnected()) //先看WIFI是否还在连接 { setupWifi(); } if (!client.connected()) //如果客户端没连接ONENET, 重新连接 { clientReconnect(); delay(100); } client.loop(); //客户端循环检测 }

void sendTempAndHumi() { if (client.connected()){ //dht.readHumidity() snprintf(msgJson,75,dataTemplate,dht.readTemperature(),dht.readHumidity(),god); json_len = strlen(msgJson); //msgJson的长度 msg_buf[0] = char(0x03); //要发送的数据必须按照ONENET的要求发送, 根据要求,数据第一位是3 msg_buf[1] = char(json_len >> 8); //数据第二位是要发送的数据长度的高八位 msg_buf[2] = char(json_len & 0xff); //数据第三位是要发送数据的长度的低八位 memcpy(msg_buf + 3, msgJson, strlen(msgJson)); //从msg_buf的第四位开始,放入要传的数据msgJson msg_buf[3 + strlen(msgJson)] = 0; //添加一个0作为最后一位, 这样要发送的msg_buf准备好了 Serial.print("public the data:"); Serial.print(msgJson); client.publish("$dp", (uint8_t *)msg_buf, 3+strlen(msgJson));//发送数据到主题 delay(500); } }

//收到主题下发的回调, 注意这个回调要实现三个形参 1:topic 主题, 2: payload: 传递过来的信息 3: length: 长度 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(); if ((char)payload[0] == '0') { digitalWrite(led, LOW); god=0; myservo.write(0); //舵机转到0度 } if ((char)payload[0] == '1') { digitalWrite(led, HIGH); god=1; myservo.write(90); //舵机转到90度 } else{ } }

void clientReconnect() { while (!client.connected()) //再重连客户端 { Serial.print("reconnect MQTT..."); if (client.connect(mqtt_devid, mqtt_pubid, mqtt_password)){ Serial.print("connected"); } else{ Serial.print("failed"); Serial.print(client.state()); Serial.print("try again in 5 sec"); delay(5000); } }

#include WiFih#include DHTh#include PubSubClienth#include Tickerh#define DHTPIN 7 #define DHTTYPE DHT11 DHT 11DHT dhtDHTPIN DHTTYPE;int god=0;const int led =18; 灯的接口const char ssid = 3671;

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

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