完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我正在编写 nodemcu esp8266 的代码,它涉及脉冲计数、存储和返回 nodemcu,使用 raspberry pi 作为服务器。为此,我使用了 3 个 nodemcu esp8266 引脚。我使用 D4 进行脉冲输出,D5 脉冲输入和 D6 使用开关(意味着当只有一个脉冲给出该引脚时,脉冲从 D4 发出),当 d5 上给出脉冲时,它存储在服务器上,当 D6 上只有一个脉冲时,所有存储脉冲在服务器上,它从 D4 引脚出来。
但问题是, 当我在 nodemcu esp8266 上上传该代码并且没有给它任何电源时,只给定引脚 D5 上只有一个脉冲,然后它的瞬间从 D4 引脚出来(我正在用 LED 检查),请帮助我。 这是我的代码 #include #include "Adafruit_MQTT.h" #include "Adafruit_MQTT_Client.h" int 脉冲 = D5; int pulse_back = D6; int LED = D4; int 脉冲状态=0; int pulse_backState=0; int 计数=0; 查布[10]; 字符串 buf2; int realcount; /************************* WiFi 接入点 *********************************/ #define WLAN_SSID "iBall-Baton" // enter your WiFi SSID #define WLAN_PASS "987654321" // this is your WiFi password /************************* Adafruit.io 设置*********************************/ #define MQTT_SERVER "192.168.1.100" // change this to your Pi IP_address #define MQTT_SERVERPORT 1883 // use 8883 for SSL #define MQTT_USERNAME "" // empty #define MQTT_KEY "" // empty /************ 全局状态(你不需要改变这个! ******************/ WiFiClient客户端; 通过传入 WiFi 客户端和 MQTT 服务器以及登录详细信息来设置 MQTT 客户端类。 Adafruit_MQTT_Client mqtt(&client, MQTT_SERVER, MQTT_SERVERPORT, MQTT_USERNAME, MQTT_KEY); /******************************数据流发布/订阅 ***************************************/ Adafruit_MQTT_Publish pot_stream = Adafruit_MQTT_Publish(&mqtt, MQTT_USERNAME "/esp/pot"); // change the topic Adafruit_MQTT_Subscribe onoffbutton = Adafruit_MQTT_Subscribe(&mqtt, MQTT_USERNAME "/feeds/N1"); /*************************** 草图代码 ************************************/ 无效 MQTT_connect(); 无效设置() { 串行.begin(9600); 延迟(10); pinMode(脉冲,INPUT_PULLUP);// pin模式(pulse_back,INPUT_PULLUP);// 引脚模式(LED,输出); 数字写入(LED,高电平); Serial.println(F("Adafruit MQTT demo")); 串行.println();串行.println(); Serial.print("Connecting to "); serial.println(wlan_ssid); WiFi.begin(WLAN_SSID, WLAN_PASS); 而 (WiFi.status() != WL_CONNECTED) { 延迟(500); Serial.print("."); } serial.println(); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); mqtt.subscribe(&onoffbutton); } uint32_t x=0; void 循环() { mqtt_connect(); pulse_backState = 数字读取(pulse_back); pulseState = digitalRead(脉冲); if (pulseState == LOW) { 计数=计数 10; serial.println(计数); pot_stream.发布(10); 延迟(100); } 如果 (pulse_backState == 低) { pot_stream.publish("N1"); // publish to Raspberry Pi under topic "/esp/pot" Serial.print("N1"); Adafruit_MQTT_Subscribe *订阅; 而 ((subscription = mqtt.readSubscription(5000))) { if (subscription == &onoffbutton) { Serial.print(F("On-Off button: ")); Serial.println((字符 *)onoffbutton.lastread); buf2=(字符 *)onoffbutton.lastread; 串行.println(buf2); realcount=buf2.toint();//整数 串行.println(realcount); for(int i=1;i<=realcount;i++) { digitalWrite(LED,高电平); 延迟(50); digitalWrite(LED,低电平); 延迟(50); } 计数=0; 实数=0; } } } } 无效 MQTT_connect() { int8_t ret; 如果 (mqtt.connected()) { 返回; } Serial.print("Connecting to MQTT... "); uint8_t 次重试 = 3; while ((ret = mqtt.connect()) != 0) { // connect 将返回 0 for connected serial.println(mqtt.connecterrorstring(ret)); Serial.println("Retrying MQTT connection in 5 seconds..."); mqtt.disconnect(); 延迟(5000); 等待 5 秒 重试--; if (重试 == 0) { 而(1); } } Serial.println("MQTT Connected!"); } |
|
相关推荐
1个回答
|
|
根据您的描述,您正在使用 ESP8266 作为脉冲计数器,并将计数结果发送到 Raspberry Pi 服务器。您遇到了一个问题,即当 ESP8266 没有电源时,给定 D5 引脚上的一个脉冲会导致 D4 引脚上的脉冲瞬间输出。以下是一些建议和解决方案:
1. 确保您的 ESP8266 硬件连接正确。检查 D4、D5 和 D6 引脚之间的连接,确保没有短路或错误的连接。 2. 在代码中添加防抖动功能。防抖动可以减少由于外部干扰或接触不良导致的误触发。您可以使用软件防抖或硬件防抖。以下是使用软件防抖的示例代码: ```cpp unsigned long lastDebounceTime = 0; unsigned long debounceDelay = 50; // 50ms debounce time bool readButton() { unsigned long currentMillis = millis(); if (digitalRead(D6) == HIGH && (currentMillis - lastDebounceTime) > debounceDelay) { lastDebounceTime = currentMillis; return true; } return false; } ``` 3. 在代码中添加电源检测功能。当 ESP8266 上电时,可以设置一个标志位,以便在电源稳定后才开始处理脉冲计数和输出。例如: ```cpp bool powerOn = false; void setup() { // 初始化引脚和连接 pinMode(D4, OUTPUT); pinMode(D5, INPUT); pinMode(D6, INPUT); // 等待电源稳定 delay(1000); powerOn = true; } void loop() { if (powerOn) { // 处理脉冲计数和输出 } } ``` 4. 检查您的代码逻辑,确保在 D5 引脚上接收到脉冲时,只有在 D6 引脚上也接收到脉冲时才从 D4 引脚输出脉冲。这可以通过添加条件语句来实现: ```cpp void loop() { if (digitalRead(D5) == HIGH) { if (readButton()) { // 使用之前定义的 readButton 函数 digitalWrite(D4, HIGH); delay(10); // 延时以模拟脉冲宽度 digitalWrite(D4, LOW); } } } ``` 5. 如果问题仍然存在,请检查您的电源供应和 ESP8266 的电源管理设置。确保电源供应稳定且符合 ESP8266 的要求。 通过以上建议,您应该能够解决 ESP8266 在没有电源时接收到 D5 引脚上的脉冲导致 D4 引脚瞬间输出的问题。如果问题仍然存在,请仔细检查硬件连接和代码逻辑,确保没有错误。 |
|
|
|
只有小组成员才能发言,加入小组>>
166个成员聚集在这个小组
加入小组1143 浏览 1 评论
582浏览 6评论
480浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
465浏览 5评论
466浏览 4评论
441浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 19:39 , Processed in 0.683139 second(s), Total 47, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号