完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
大家好。菜鸟在这里,所以请保持温柔。
我第一次尝试直接从 Arduino IDE 对 ESP8266 进行编程。 一个简单的继电器控制器(它实际上是一个 ESP-01 板,目前在 IO 引脚上有几个带 1k 电阻的 LED,而我正在等待实际的继电器板)。我从众多在线教程中窃取了代码,然后我们走了。像梦一样工作。 但是,在 Web 服务器停止响应一段不确定的时间后,我仍然可以 ping 设备,因此它显然还活着,并且在重新启动后一切正常。 页面访问 Web 服务器的频率似乎无关紧要。 一连串的谷歌搜索显示其他人也有类似的问题,但没有真正可靠的答案。我已经按照其中一个“解决方案”中的建议恢复到 ESP8266 IDE 附加组件的 V2.5.2,事情似乎确实有所改善,但它只是在 12 小时后再次锁定。 电源稳固,12V 2A 电源模块可稳压至 5V,适用于板载 3.3V 稳压器的 ESP-01。 我添加了一些代码来将继电器状态存储在 eeprom 中,因此它在重启后仍然存在并卡在定时硬重置中,但从长远来看,这并不是一个真正可行的解决方案。 想法、想法? 代码如下:- 代码:全选 /* V1.0a added fixed IP address. V1.0b / c added flash to retain the relay state over a reset. */ #include #include // Set up for the WiFi server IPAddress ip(192, 168, 1, 50); IPAddress gateway(192, 168, 1, 254); IPAddress subnet(255, 255, 255, 0); IPAddress DNS(192, 168, 1, 254); const char* ssid = \"\"; // fill in here your router or wifi SSID const char* password = \"\"; // fill in here your router or wifi password #define RELAY 0 // relay connected to GPIO0 WiFiServer server(80); // Set up for FLASH storage byte eepromVar1 = 0; unsigned long oldmillis = 0; void setup() { Serial.begin(9600); // must be same baudrate with the Serial Monitor EEPROM.begin(16); // 16 Bytes (minimum is 16) EEPROM.get(0, eepromVar1); // Read the relay state from eeprom Serial.print (\"Getting relay value from eeprom \"); Serial.println (eepromVar1); pinMode(RELAY,OUTPUT); if (bitRead(eepromVar1,0) == 0) { digitalWrite(RELAY,LOW);} // and write it to the relay pins else { digitalWrite(RELAY,HIGH);} oldmillis = millis(); // Reset timer for brute force reset // Connect to WiFi network Serial.println(); Serial.println(); Serial.print(\"Connecting to \"); Serial.println(ssid); WiFi.config(ip, gateway, subnet, DNS); delay (100); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print(\".\"); } Serial.println(\"\"); Serial.println(\"WiFi connected\"); // Start the server server.begin(); Serial.println(\"Server started\"); // Print the IP address Serial.print(\"Use this URL to connect: \"); Serial.print(\"http://\"); Serial.print(WiFi.localIP()); Serial.println(\"/\"); } // ********** Main Loop Below ******************* void loop() { /* if (millis() - oldmillis >= 180000UL) { Serial.println(\"Resetting ESP\"); ESP.restart(); } */ // Check if a client has connected WiFiClient client = server.available(); if (!client) { return; } // Wait until the client sends some data Serial.println(\"new client\"); while(!client.available()) { delay(1); } // Read the first line of the request String request = client.readStringUntil(\'\\r\'); Serial.println(request); client.flush(); // Match the request int value = LOW; if (request.indexOf(\"/RELAY=ON\") != -1) { Serial.println(\"RELAY=ON\"); bitSet(eepromVar1 , 0); digitalWrite(RELAY,HIGH); value = LOW; } if (request.indexOf(\"/RELAY=OFF\") != -1) { Serial.println(\"RELAY=OFF\"); bitClear(eepromVar1 , 0); digitalWrite(RELAY,LOW); value = HIGH; } // Write the eeprom EEPROM.put(0, eepromVar1); EEPROM.commit(); // Return the response client.println(\"HTTP/1.1 200 OK\"); client.println(\"Content-Type: text/html\"); client.println(\"\"); // this is a must client.println(\"\"); client.println(\"\"); client.println(\"ESP8266 RELAY Control\"); client.print(\"Relay is now: \"); if(value == HIGH) { client.print(\"OFF\"); } else { client.print(\"ON\"); } client.println(\" \"); client.println(\"Turn OFF RELAY \"); client.println(\"Turn ON RELAY \"); client.println(\"\"); delay(1); Serial.println(\"Client disonnected\"); Serial.println(\"\"); } |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
1078 浏览 1 评论
567浏览 6评论
475浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
458浏览 5评论
458浏览 4评论
429浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-12 08:53 , Processed in 0.767105 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号