完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我有一个项目涉及两个 PIR 传感器,每个传感器都连接到 ESP8266 ESP-01。一个将成为客户端,并将其状态发送到另一个 ESP,而该 ESP 将充当服务器和客户端,以收集该状态,然后将信息发送到 ThingSpeak。
通过结合我在网上找到的多个示例中的信息进行大量试验和错误,我已经能够让它工作,但我不是 100% 确定我的所有代码在做什么。 此外,我在使用 HC-SR501 时遇到了误报问题。当我解决这个问题时,两个 ESP 都被设置为仅客户端,并且每个都独立地与 ThingSpeak 通信。我找到了两种为我解决问题的方法: 然而,误报又回来了,据我所知,它只发生在服务器和客户端上。 代码:全选#include #include #include "ThingSpeak.h" //------- WI-FI details ----------// char ssid[] = "xxxxxxxxxxx"; //SSID here char pass[] = "xxxxxxxxxxx"; // Passowrd here //-----------------------------// //----------- Channel details ----------------// unsigned long Channel_ID = xxxxxxxxxx; // Your Channel ID const char * myWriteAPIKey = "xxxxxxxxxx"; //Your write API key //-------------------------------------------// WiFiServer server(80); WiFiClient client; IPAddress ip(192, 168, 4, 147); // IP address of the server IPAddress gateway(192,168,1,1); // gateway of your network IPAddress subnet(255,255,255,0); // subnet mask of your network #define SENSOR 2 unsigned long timeNow = 0; unsigned long speakTimer = 0; unsigned long sensorTimer = 0; unsigned long instance = 0; int powerValue = 10; int sensorVal = 0; int serverVal = 0; int sendingVal = 0; int writeSuccess = 0; String request = ""; void setup() { Serial.begin(115200); wifi_set_phy_mode(PHY_MODE_11G); system_phy_set_max_tpw(powerValue); pinMode(SENSOR, INPUT); internetServer(); } void loop() { internetServer(); timeNow = millis(); if (timeNow - sensorTimer > 500) { sensorVal = digitalRead(SENSOR); Serial.println(sensorVal); if (sensorVal == 1) { serverVal = 1; } sensorTimer = millis(); } WiFiClient client = server.available(); if (client) { if (client.connected()) { Serial.println("."); request = client.readStringUntil('\r'); // receives the message from the client Serial.print("From client: "); Serial.println(request); client.flush(); client.println("Data received!\r"); // } client.stop(); } if (request == "1" || serverVal == 1) { sendingVal = 1; } if (timeNow - speakTimer > 15100) { internetClient(); } } void internetServer() { if (WiFi.status() != WL_CONNECTED) { while (WiFi.status() != WL_CONNECTED) { Serial.print("."); WiFi.config(ip, gateway, subnet); WiFi.begin(ssid, pass); delay(5000); } server.begin(); // starts the server Serial.println("Connected to wifi"); Serial.print("Status: "); Serial.println(WiFi.status()); // some parameters from the network Serial.print("IP: "); Serial.println(WiFi.localIP()); Serial.print("Subnet: "); Serial.println(WiFi.subnetMask()); Serial.print("Gateway: "); Serial.println(WiFi.gatewayIP()); Serial.print("SSID: "); Serial.println(WiFi.SSID()); Serial.print("Signal: "); Serial.println(WiFi.RSSI()); Serial.print("Networks: "); Serial.println(WiFi.scanNetworks()); } } void internetClient() { WiFiClient client; ThingSpeak.begin(client); upload(); } void upload() { ThingSpeak.setField(1,(String)sendingVal); ThingSpeak.setField(2,(String)instance); writeSuccess = ThingSpeak.writeFields(Channel_ID, myWriteAPIKey); while (writeSuccess == -301) { ThingSpeak.setField(1,(String)sendingVal); ThingSpeak.setField(2,(String)instance); writeSuccess = ThingSpeak.writeFields(Channel_ID, myWriteAPIKey); Serial.println(writeSuccess); } speakTimer = millis(); sendingVal = 0; serverVal = 0; instance++; } |
|
相关推荐
1个回答
|
|
对于ESP8266 ESP-01客户端和服务器的电源问题,您可以考虑使用外部电源来提供稳定的电压。您可以使用一个电池或一个AC/DC转换器,将其连接到两个ESP8266并提供稳定的电源。
关于您的代码,建议您仔细阅读并理解每一行代码。如果您有任何疑问,可以与编写代码的人联系,并请他们解释您不理解的内容。 对于HC-SR501的误报问题,您可以调整传感器的敏感度和延迟时间,或者使用其他类型的传感器。您还可以尝试使用一个滤波器来减少误报的发生。 |
|
|
|
只有小组成员才能发言,加入小组>>
920 浏览 1 评论
552浏览 6评论
461浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
445浏览 5评论
446浏览 4评论
417浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 09:16 , Processed in 0.682515 second(s), Total 48, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号