如何解决ESP32-WROOM-使用多核的问题
我的ESP32 Wroom代码有问题。 我正在尝试使用esp上的两个内核来加速并为设备创建高效的过程。一个核心检查网站页面上的更改/响应。另一个根据收到的响应更改led模式。
核心0(获取响应)应该不断使用网站上收到的最新信息来更新一个名为“有效负载”的字符串。这是在另一个内核正在显示模式之前发生的,直到它收到“有效载荷”的更改为止;并相应地进行更改。
我遇到的问题是,在上传并首次启动后的esp每1-2秒会打印以下消息:
rst:0x8 (TG1WDT_SYS_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0,SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO,clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:1044
load:0x40078000,len:8896
load:0x40080400,len:5816
entry 0x400806ac
某些消息中也印有此内容:
上师冥想错误:核心0惊慌(双重例外)
我是ESP32的新手,没有Arduino的丰富经验,是否有人知道我在做错什么,或者为避免当前问题而实现同一目标的方法。预先感谢。
这是我的项目的代码。
TaskHandle_t Task1;
#include <WiFi.h>
#include <Wire.h>
#include <HTTPClient.h>
#include "FastLED.h"
#define NUM_LEDS 50
#define PIN 27
uint8_t hue[NUM_LEDS];
CRGBArray<NUM_LEDS> leds;
const char* ssid = "Username";
const char* password = "Password";
const char* serverName = "https://example.com/page.php";
String apiKeyValue = "tPmAT5Ab3j7F9";
String payload;
void codeForTask1( void * parameter )
{
for (;;)
{
if(WiFi.status() == WL_CONNECTED)
{
HTTPClient http;
// Your Domain name with URL path or IP address with path
http.begin(serverName);
// Specify content-type header
http.addHeader("Content-Type","application/x-www-form-urlencoded");
// Prepare your HTTP POST request data
String httpRequestData = "api_key=" + apiKeyValue;
// Send HTTP POST request
int httpResponseCode = http.GET();
if (httpResponseCode>0)
{
payload = http.getString();
}
}
delay(1000);
}
}
void setup()
{
Serial.begin(115200);
WiFi.begin(ssid,password);
while(WiFi.status() != WL_CONNECTED) {
delay(500);
}
FastLED.addLeds<NEOPIXEL,PIN>(leds,NUM_LEDS);
for (int i = 0; i < NUM_LEDS; i++)
{
hue[i] = 255 / NUM_LEDS * i;
}
xTaskCreatePinnedToCore(
&codeForTask1,"led1Task",2000,NULL,1,&Task1,0);
delay(500); // needed to start-up task1
}
void loop()
{
String payload2 = payload;
if(payload2.indexOf("rainbow") >= 0)
{
while(payload2.indexOf("rainbow") >= 0)
{
for(int i=0; i<NUM_LEDS; i++)
{
leds[i] = CHSV(hue[i]++,255,255);
}
delay(100);
FastLED.show();
}
Serial.print(payload2 + " || Rainbow \n");
}
else if(payload2.indexOf("worm") >= 0)
{
for(int i=0; i<NUM_LEDS; i++)
{
for(int e=0; e<=1; e++)
{
if(e == 0){
leds[i] = CRGB(255,255);
leds[i+2] = CRGB(255,255);
leds[i+4] = CRGB(255,255);
leds[i+6] = CRGB(255,255);
FastLED.show();
}else{
leds[i] = CRGB(0,0);
leds[i+2] = CRGB(0,0);
FastLED.show();
}
delay(100);
}
}
Serial.print(payload2 + " || Worm \n");
}
else if(payload2.indexOf("ant") >= 0)
{
for(int i=0; i<NUM_LEDS; i++) // loop
{
for(int e=0; e<=1; e++)
{
if(e == 0)
{
leds[i] = CRGB(255,255);
leds[i+1] = CRGB(255,255);
leds[i+2] = CRGB(0,0);
leds[i+4] = CRGB(255,255);
leds[i+5] = CRGB(255,255);
leds[i+3] = CRGB(0,0);
FastLED.show();
}
else
{
leds[i] = CRGB(0,0);
leds[i+1] = CRGB(0,0);
FastLED.show();
}
delay(50);
}
}
Serial.print(payload2 + " || Ant \n");
}
else if(payload.indexOf("off") >= 0)
{
Serial.print(payload2 + " || Off \n" );
}
else if(!payload2.isEmpty())
{
String dab = payload;
String hexstring = dab;
long number = (long) strtol( &hexstring[0],16 );
int r = number >> 16;
int g = number >> 8 & 0xFF;
int b = number & 0xFF;
for(int i=0; i<NUM_LEDS; i++){
leds[i] = CRGB(r,g,b);
}
FastLED.show(); // start new rgb led strip assignment/patterns
Serial.print(payload2 + " || CUSTOM COLOR \n");
}
delay(1000);
Serial.print("Task 1: Done \n");
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。