完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
大家好,我想使用Wemos D1R2微控制器和几种类型的传感器进行天气监测。该项目使用 Telegram 机器人了解该地点的情况,并使用 blynk 云查看天气趋势。问题是方向和风速传感器的编码不能在 Telegram 上运行(我不知道问题出在哪里)它只能在 Blynk Cloud web 上运行。对于其他传感器,它可以在 Telegram 和 Blynk Cloud 网络上运行。谢谢大家,我希望有人愿意帮助我。例如我在下面附上的草图代码:
#define BLYNK_TEMPLATE_ID \"TMPLLbVmeb_W\" #define BLYNK_DEVICE_NAME \"Monitoring Pacung\" #define BLYNK_AUTH_TOKEN \"5ncqWXnlEQhZBGsARLy0CoR19gipJuTA\" #define TLG_TOKEN \"5867588680:AAE5s322NLJc8RE1Q9MYJ3Iy_lc5FmpUHag\" // token anakkendali_bot #define WIFI_SSID \"apah\" #define WIFI_PASS \"yoi123321\" #include #include #include #define BLYNK_PRINT 序列 # include // 设备库(Arduino ESP32/ESP8266 内核) #include #include #include #include \"DHT.h\" #include #define DHTPIN D6 #define DHTTYPE DHT22 DHT dht(DHTPIN, DHTTYPE); BH1750 GY30; Adafruit_BMP085 bmp; 浮动 h, t, l, p; #define MAX_LENGTH_WIFI_SSID 31 #define MAX_LENGTH_WIFI_PASS 63 char auth[] = BLYNK_AUTH_TOKEN; #define DEBUG_LEVEL_UTLGBOT 0 Blynktimer 计时器; 软件序列数据序列(2, 14); 字符串数据,arah_angin,s_angin; 诠释一个,乙; 易失性字节 rpmcount;// 计数信号 volatile unsigned long last_micros; 未签名的长期旧的; 无符号长时间测量 = 5.00;// 秒 int timetoSleep = 1; // 分钟 unsigned long sleepTime = 15; // 分钟 无符号 long timeNow; int countThing = 0; int GPIO_pulse = D7; // NodeMCU = D5 float rpm, rps; //频率 浮动半径= 0.1;// 米 - 每个风速计机翼 浮标长度的测量值 velocity_kmh;// km/h float velocity_ms; //米/秒 浮动欧米茄= 0;// rad/s float calibration_value = 2.0; 易失性布尔标志 = false; const char TEXT_START[] = \"Halo, saya adalah Bot Monitoring Perubahan Cuaca di Desa Pacung.\\n\" \"\\n\" \"Klik /info untuk melihat perubahan cuaca di Desa Pacung.\"; 焦炭[100]; 布尔状态_t,状态_h; const char TEXT_HELP[] = \"可用命令:\\n\" \" \\n\" \"/start - 显示开始文本。\\n\" \" /info - 显示实际文本。\\n\" \"/relayon - 打开继电器。\\n “ \"/statustekanan - 显示实际压力状态。\\n\" \"/statuscahaya - 显示实际勒克斯状态。\\n\" \" /statussuhu - 显示实际温度状态。\\n\" \" /statuskelembaban - 显示实际湿度状态。\\n\"; void wifi_init_stat(void); bool wifi_handle_connection(void); // 创建机器人对象 uTLGBot Bot(TLG_TOKEN); void ICACHE_RAM_ATTR rpm_anemometer() { flag = true; } void sendSensor() { float h = dht.readHumidity(); float t = dht.readTemperature(); // 或 dht.readTemperature(true) 华氏温度 float l = GY30.readLightLevel(); 浮动 p = bmp.readPressure(); 如果 (isnan(h) || isnan(t)) { Serial.println(\"无法读取 DHT 传感器!\"); 返回; } if (dataserial.available()) // Jika ada data yang diterima dari sensor { data = dataserial.readString(); // data yang diterima dari sensor berawalan tanda * dan diakhiri tanda #, contoh *1# a = data.indexOf(\"*\"); // 一个 adalah 索引 tanda * b = data.indexOf(\"#\"); // b adalah 索引 tanda # s_angin = data.substring(a + 1, b); // membuang tanda * dan # sehingga di dapat nilai dari arah angin if (s_angin.equals(\"1\")) { // jika nilai dari 传感器 1 maka arah angin utara arah_angin = \"utara \"; } if (s_angin.equals(\"2\")) { arah_angin = \" 如果 (s_angin.equals(\"3\")) { arah_angin = \"timur\"; } if (s_angin.equals(\"4\")) { arah_angin = \"tenggara \"; } if (s_angin.equals(\"5\")) { arah_angin = \"selatan \"; } if (s_angin.equals(\"6\")) { arah_angin = \"barat daya\"; } if (s_angin.equals(\"7\")) { arah_angin = \"barat \"; } if (s_angin.equals(\"8\")) { arah_angin = \"barat laut\"; } Serial.println(arah_angin); } if (flag == true) // 不要 if (long(micros() - last_micros) >= 5000) { // 去抖时间测量 rpmcount++; last_micros = micros(); } 标志 = 假; // 重置标志 } // 测量 RPM if ((millis() - timeold) >= timemeasure * 1000) { countThing++; detachInterrupt(digitalPinToInterrupt(GPIO_pulse));// 计算时禁止中断 rps = float(rpmcount) / float(timemeasure); // 每秒转数 rpm = 60 * rps; // 每分钟转数 omega = 2 * PI * rps; // rad/s velocity_ms = omega * radius * calibration_value; // 多发性硬化症 velocity_kmh = velocity_ms * 3.6; // km/h if (countThing == 1) // 每 25 秒发送一次数据 { countThing = 0; } timeold = millis(); 转数 = 0; attachInterrupt(digitalPinToInterrupt(GPIO_pulse),rpm_anemometer,RISING);// 启用中断 } // 您可以随时发送任何值。 // 请不要每秒发送超过 10 个值。 Blynk.virtualWrite(V0, t); Blynk.virtualWrite(V1, h); Blynk.virtualWrite(V2, l); Blynk.virtualWrite(V3, p); Blynk.virtualWrite(V4, arah_angin); Blynk.virtualWrite(V5, velocity_kmh); Serial.print(\"温度:\"); 串行打印(t); Serial.print(\"湿度:\"); 序列号.println(h); } void setup(void) { Serial.begin(9600); dataserial.begin(9600); 连线开始(); GY30.开始(); dht.开始(); Serial.println(F(\"BH1750 测试开始\")); Bot.getMe(); pinMode(GPIO_pulse, INPUT_PULLUP); 数字写入(GPIO_脉冲,低); detachInterrupt(digitalPinToInterrupt(GPIO_pulse));// 强制在零时启动中断 attachInterrupt (digitalPinToInterrupt(GPIO_pulse), rpm_anemometer, RISING); //初始化中断引脚 rpmcount = 0; 转数 = 0; 时间旧 = 0; 现在时间 = 0; Blynk.begin(auth, WIFI_SSID, WIFI_PASS); timer.setInterval(100L, sendSensor); Bot.set_debug(DEBUG_LEVEL_UTLGBOT); wifi_init_stat(); if (!bmp.begin()) { Serial.println(“找不到有效的 BMP085/BMP180 传感器,检查接线!”); while (1) {} } Serial.println(\"等待 WiFi 连接。\"); while (!wifi_handle_connection()) { Serial.print(\".\"); 延迟(500); } } void loop() { if (!wifi_handle_connection()) { // 等待 100ms 并再次检查 delay(100); 返回; } // 检查 Bot 收到的消息 while (Bot.getUpdates()) { Serial.println(\"收到消息:\"); Serial.println(Bot.received_msg.text); Serial.println(Bot.received_msg.chat.id); if (strncmp(Bot.received_msg.text, \"/start\", strlen(\"/start\")) == 0) { Bot.sendMessage(Bot.received_msg.chat.id, TEXT_START); } else if (strncmp(Bot.received_msg.text, \"/info\", strlen(\"/info\")) == 0) { l = GY30.readLightLevel(); String msg = \"Status Cahaya: \" + String (l) + \" lx \\n\"; t = dht.readTemperature(); msg += \"状态suhu:\" + String(t) + \"°C\\n\"; h = dht.readHumidity(); msg += \"Status Kelembaban: \" + String (h) + \" %Rh \\n\"; msg += \"Arah angin saat ini \" + String (arah_angin) + \" \\n\"; p = bmp.readPressure(); msg += \"Status Tekanan: \" + String (p) + \" pa \\n\"; msg += \"速度:\" + String (velocity_ms) + \" m/s \\n\"; msg.toCharArray(buff, 1000); Bot.sendMessage(Bot.received_msg.chat.id, buff); } // 喂看门狗 yield(); } 如果 (t > 30 && state_t == 0) { state_t = 1; String msg = \"状态苏护:\"; 味精+=吨; 味精+=“°C\\n”; msg += \"Hati Hati Panas。 Bot.sendMessage(\"945680895\", buff); } else if (t <= 30) { state_t = 0; } if (h < 60 && state_h == 0) { state_h = 1; String msg = \"状态 Kelembaban :\"; 味精+=小时; msg += \" %Rh\\n\"; msg += \"Hati Hati Kering.\"; msg.toCharArray(buff, 100); Bot.sendMessage(\"556538872\", buff); } else if (h >= 60) { state_h = 0; } Serial.print(F(\"湿度:\")); 串行打印(h); Serial.print(F(\"% 温度:\")); 串行打印(t); Serial.println(F(\"°C\")); 延迟(1000); Blynk.运行(); 定时器.run(); } // 初始化 WiFi 接口 void wifi_init_stat(void) { Serial.println(\"Initializing TCP-IP adapter...\"); Serial.print(\"Wifi 连接到 SSID:\"); Serial.println(WIFI_SSID); WiFi.mode(WIFI_STA); WiFi.begin(WIFI_SSID, WIFI_PASS); Serial.println(\"TCP-IP 适配器成功初始化。\"); } bool wifi_handle_connection(void) { static bool wifi_connected = false; // 设备未连接 if (WiFi.status() != WL_CONNECTED) { // 已连接 if (wifi_connected) { Serial.println(\"WiFi disconnected.\"); wifi_connected = false; } 返回假; } // 设备已连接 else { // 未连接 if (!wifi_connected) { Serial.println(\"\"); Serial.println(\"WiFi 已连接\"); Serial.print(\"IP地址:\"); Serial.println(WiFi.localIP()); wifi_connected = 真; } 返回真; } } |
|
相关推荐 |
|
只有小组成员才能发言,加入小组>>
196个成员聚集在这个小组
加入小组480 浏览 1 评论
1762 浏览 2 评论
为blufi_device设置自定义名称,但是无法修改,为什么?
382浏览 4评论
请问ESP32-S2-WROOM怎么获得ESP32-S2外接FLASH的唯一序列号?
176浏览 3评论
ESP-Jumpstart例程中第5个工程:5_cloud连接报错是哪里的问题?
222浏览 2评论
用AT+CIPSNTPCFG=1,8,\"cn.ntp.org.cn\",\"ntp.sjtu.edu.cn\"更新不了时间怎么处理?
575浏览 2评论
265浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-3-5 05:19 , Processed in 0.652627 second(s), Total 70, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191