完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我已经为此苦苦挣扎了一个星期,但我无法弄清楚问题出在哪里。我不是全职程序员,我从网上获取代码并将其组合在一起。
我在 Arduino 1.8.5 IDE 中使用 ESP8266-07 我的项目目标: 我从另一个 ESP 设备(或现在我的 PC 网络浏览器)收到网络请求 我处理信息(冰箱的温度或电压) 3 个电池组) 我在 Waveshare 1.54 电子纸上显示信息。 将代码上传到 ESP 后,我得到: 代码:全选Sketch uses 306508 bytes (29%) of program storage space. Maximum is 1023984 bytes. Global variables use 38148 bytes (46%) of dynamic memory, leaving 43772 bytes for local variables. Maximum is 81920 bytes. 当我启动 ESP 时,显示会自行更新 当我向 ESP 发送 Web 请求时,有时它可以工作,有时它会崩溃显示: 代码:全选Soft WDT reset >>>stack>>> ctx: cont sp: 3ffffcd0 end: 3fffffc0 offset: 01b0 我不确定发送网络请求是否正确,因为我不需要网页的任何反馈,但我想不出其他方法。 另一个谜是,如果我在循环的顶部添加 Serial.println("test"),它的行为符合预期,但如果我在循环的底部做同样的事情,它只会在我发送网络请求。 这是我的代码(只缺少 image.h 但那部分工作正常) 代码:全选#include #include #include #include #include #include #include "images.h" #include #include #include #include #include GxIO_Class io(SPI, /*CS=D16*/ 16, /*DC=D4*/ 4, /*RST=D5*/ 5); GxEPD_Class ePaper(io, 5, 12 /*RST=D5*/ /*BUSY=D12*/); const char* ssid = "myssid"; const char* password = "mypw"; String req,val1,val2,val3, valf; WiFiUDP ntpUDP; NTPClient timeClient(ntpUDP); String formattedDate; String dayStamp; String timeStamp; String dtStampf = "0000-00-00 00:00"; String dtStampb = "0000-00-00 00:00"; // Create an instance of the server // specify the port to listen on as an argument WiFiServer server(80); void updateDisplay(); void epaperUpdate(); void setup() { Serial.begin(115200); delay(10); updateDisplay(); NBNS.begin("FLOSTATION"); timeClient.begin(); timeClient.setTimeOffset(-14400); // Connect to WiFi network WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); } Serial.println(""); Serial.println("WiFi connected"); // Start the server server.begin(); Serial.println("Server started"); // Print the IP address Serial.println(WiFi.localIP()); } void updateDisplay() { //Serial.println("Updating Display"); ePaper.init(115200); // enable diagnostic output on Serial //Serial.println("Init Display"); ePaper.drawPaged(epaperUpdate); } void epaperUpdate() { ePaper.eraseDisplay(); ePaper.setRotation(1); ePaper.drawBitmap(gImage_boatdisp, 0, 0, 200, 200, GxEPD_RED); ePaper.setTextColor(GxEPD_BLACK); const GFXfont* f9 = &FreeMonoBold9pt7b; const GFXfont* f12 = &FreeMonoBold12pt7b; const GFXfont* f18 = &FreeMonoBold18pt7b; ePaper.setFont(f18); ePaper.setCursor(90, 50); ePaper.print(valf); ePaper.print("C"); ePaper.setFont(f9); ePaper.setCursor(10, 80); ePaper.println(dtStampf); ePaper.setFont(f12); ePaper.setCursor(80, 118); ePaper.print("C "); ePaper.print(val1); ePaper.print("V"); ePaper.setCursor(80, 138); ePaper.print("H "); ePaper.print(val2); ePaper.print("V"); ePaper.setCursor(80, 158); ePaper.print("G "); ePaper.print(val3); ePaper.print("V"); ePaper.setFont(f9); ePaper.setCursor(10, 182); ePaper.println(dtStampb); } void loop() { //----top of loop WiFiClient client = server.available(); if (!client) { return; } while(!client.available()){ delay(1); } //generate request for battery with: http://FLOSTATION/batteryb100.00b200.00b300.00 //generate request for fridge with: http://FLOSTATION/fridge00 req = client.readStringUntil('r'); //---------I don't need any response from that web page but if I don't include the folowing 6 lines, // my code loops a bunch times. client.println("HTTP/1.1 200 OK"); client.println("Content-type:text/html"); client.println("Connection: close"); client.println(); client.flush(); client.stop(); //----expected input: 'GET /batteryb1xx.xxb2xx.xxb3xx.xx HTTP/1.1' if(req.indexOf("battery") != -1){ val1 = req.substring(14, 19); val2 = req.substring(21, 26); val3 = req.substring(28, 33); while(!timeClient.update()) { timeClient.forceUpdate(); } formattedDate = timeClient.getFormattedDate(); int splitT = formattedDate.indexOf("T"); dayStamp = formattedDate.substring(0, splitT); timeStamp = formattedDate.substring(splitT+1, formattedDate.length()-4); dtStampb = dayStamp + " " + timeStamp; updateDisplay(); } //----expected input: 'GET /fridgexx HTTP/1.1' if(req.indexOf("fridge") != -1){ valf = req.substring(11, 13); while(!timeClient.update()) { timeClient.forceUpdate(); } formattedDate = timeClient.getFormattedDate(); int splitT = formattedDate.indexOf("T"); dayStamp = formattedDate.substring(0, splitT); timeStamp = formattedDate.substring(splitT+1, formattedDate.length()-4); dtStampf = dayStamp + " " + timeStamp; updateDisplay(); } //----bottom of loop } |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
545浏览 6评论
457浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
437浏览 5评论
441浏览 4评论
411浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 00:38 , Processed in 0.687137 second(s), Total 73, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号