簡體   English   中英

Waveshare電子紙書ESP32板上的HTTP客戶端管理問題

[英]Problems with HTTP client management on Waveshare e-paper ESP32 board

大家,早安。 我正在基於IDE Arduino上的ESP32版本開發用於Waveshare電子顯示器的應用程序。 該指令是在顯示器上打印由Web服務在特定地址提供的位圖圖像。 作為一個初學者,我不清楚如何使用GxEPD庫打印位圖,但是這個問題是次要的。 首先,我試圖恢復“更簡單”的Web資源的內容,即由ESP8266提供的文本/純HTML,該ESP8266被編程為充當“基本” Web服務器。 在這種情況下,ESP32必須獲取此簡短測試文本,然后在顯示屏上顯示。 但是,有一個我無法解決的缺點。 ESP32對資源的第一次GET嘗試總是失敗; 在第二次嘗試時,它將運行,它將占用資源並將其打印在串行輸出上,但是在Waveshare顯示器上打印該資源之前,系統崩潰並重新啟動。 這是串行輸出:

Display initialized!

HTTP began!
Error on HTTP request

HTTP communication ended


HTTP began!
HTTP GET accepted!
200
Welcome! This is a test page of the ESP8266 Web Server.
.
.
Guru Meditation Error: Core  1 panic'ed (LoadProhibited). Exception was unhandled.
Core 1 register dump:
PC      : 0x4015ea54  PS      : 0x00060430  A0      : 0x800d4856  A1      : 0x3ffb1ea0
A2      : 0x3ffb1f10  A3      : 0x00000000  A4      : 0x00000625  A5      : 0x3ffc8eb8
A6      : 0x00000001  A7      : 0x00000175  A8      : 0x00000000  A9      : 0x3ffb1e80
A10     : 0x3ffafe88  A11     : 0x00000000  A12     : 0x00000002  A13     : 0x0000ff00
A14     : 0x00ff0000  A15     : 0xff000000  SAR     : 0x0000000a  EXCCAUSE: 0x0000001c
EXCVADDR: 0x00000010  LBEG    : 0x400014fd  LEND    : 0x4000150d  LCOUNT  : 0xffffffff

Backtrace: 0x4015ea54:0x3ffb1ea0 0x400d4853:0x3ffb1ec0 0x400d48c5:0x3ffb1ee0 0x400d1946:0x3ffb1f00 0x400d8d05:0x3ffb1fb0 0x40088b9d:0x3ffb1fd0

Rebooting...

esp32然后重新啟動,並以第一個失敗的請求重新啟動,然后是第二個成功的請求,立即使它崩潰並再次重新啟動。

esp32上刷新的代碼如下:

#include <GxEPD.h>
#include <GxGDEW075T8/GxGDEW075T8.h>


#include <Fonts/FreeMonoBold9pt7b.h>
#include <Fonts/FreeMonoBold12pt7b.h>
#include <Fonts/FreeMonoBold18pt7b.h>
#include <Fonts/FreeMonoBold24pt7b.h>

#include <GxIO/GxIO.h>
#include <GxIO/GxIO_SPI/GxIO_SPI.h>
#include <WiFi.h>
#include <HTTPClient.h>

GxIO_Class io(SPI, /*CS=5*/ 15, /*DC=*/ 27, /*RST=*/ 26); // arbitrary selection of 17, 16
GxEPD_Class display(io, /*RST=*/ 26, /*BUSY=*/ 25); // arbitrary selection of (16), 4

const char* ssid = "joan";
const char* password = "joan1q2w";

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  Serial.println("Avvio completato!\n");
  // setup the display
  display.init();
  Serial.println("Display initialized!\n");

  /* ISTRUZIONI SPECIALI PER IL NOSTRO MODELLO DI ESP32 WAVESHARE */
  SPI.end(); // release standard SPI pins, e.g. SCK(18), MISO(19), MOSI(23), SS(5)
  SPI.begin(13, 12, 14, 15); // map and init SPI pins SCK(13), MISO(12), MOSI(14), SS(15)
  /*  FINE ISTRUZIONI SPECIALI */

  WiFi.begin(ssid, password);


}

void loop()
{
  HTTPClient httpclient;

  httpclient.begin("http://172.16.0.104/welcome");
  Serial.println("HTTP began!");

  int httpCode = httpclient.GET();  // Questo in realtà serve per verificare il codice della richiesta e fare error handling. non è la richiesta vera e propria!

  if (httpCode > 0)   // Se la GET va a buon fine, posso fare effettivamente l'acquisizione
  {
    Serial.println("HTTP GET accepted!");
    String payload = httpclient.getString();  // ritorna una String con la risposta.
    Serial.println(httpCode);
    Serial.println(payload);
  }
  else
  {
    Serial.println("Error on HTTP request");
  }

  httpclient.end();

  Serial.println("HTTP communication ended");

  delay(15000);

}

我還想補充一點,我已經嘗試了一些Web資源,ESP32始終以這種方式運行。 第一個失敗,第二個成功,但是使卡崩潰。 我的想法已經用完了,無法對代碼進行進一步的故障排除...

我在Arduino庫中看不到任何end()函數。

而且,正如您在輸出中所看到的,正是該行將為您提供異常。

因此,可能是IDE使用了錯誤的庫(一個來自Arduino的庫,而不是來自ESP32的一個庫)。

如果使用正確的庫,也可能是因為您沒有在等待連接!

重要的是要等待,直到已連接。 在安裝結束時添加:

while(WiFi.status() != WL_CONNECTED) { 
  delay(500);
  Serial.print(".");
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM