ESP32 的 Core 1 和 0 不能分开工作
Core 1 and 0 of ESP32 not working seperately
这是我的代码
#include <WiFi.h>
//#include "StepperMotor.h"
#define SDA_PIN 4
#define SCL_PIN 5
const char* ssid = "StepperMotorWireless";
const char* password = "";
WiFiServer server(9090);
WiFiClient client;
char buffer[50] = {0};
int buffercounter = 0;
TaskHandle_t StepperHandler;
TaskHandle_t WifiHandler;
void setup()
{
Serial.begin(9600);
SetWifi(ssid, password);
pinMode(2, OUTPUT);
xTaskCreatePinnedToCore(
StepperLoop, /* Task function. */
"StepperHandler", /* name of task. */
4000, /* Stack size of task */
NULL, /* parameter of the task */
2, /* priority of the task */
&StepperHandler, /* Task handle to keep track of created task */
1); /* pin task to core 0 */
}
void SetWifi(const char* name, const char* password)
{
WiFi.disconnect();
WiFi.mode(WIFI_AP_STA);
WiFi.softAP(name, password);
delay(2000);
IPAddress IP = WiFi.softAPIP();
Serial.print("Server IP : ");
Serial.println(IP);
server.begin();
server.setNoDelay(true);
Serial.println("Server Started");
}
void availableMessage() {
if (client && client.connected() && client.available()) {
while (client.available()) {
String message = client.readStringUntil('\n');
Serial.println(message);
char temp[50];
message.toCharArray(temp, 50);
client.flush();
}
}
}
void connectClient() {
if (server.hasClient())
{
if (client = server.available()) {
Serial.println("connected");
}
}
}
void StepperLoop( void * pvParameters ) {
digitalWrite(2, HIGH);
delay(1000);
digitalWrite(2, LOW);
delay(1000);
}
void loop()
{
connectClient();
availableMessage();
}
问题是我闪烁的 LED 不是 1 秒长,所以有什么东西打断了它(显然是 wifi,因为那是唯一的另一件事 运行)。
这很奇怪,因为你在互联网上看到的每一个东西,Wifi 任务都固定在核心 0 上,而我 运行 我的闪烁代码在核心 1 上,所以这不应该干扰。
我似乎无法解决这个问题,有人可以帮我吗?
顺便说一句,我正在使用 arduino IDE
不长闪烁1秒是什么意思?你测过时间还是可以直接看到?
你的 LED/Stepper 循环不是循环!如果你让 LED 闪烁不止一次:
void StepperLoop( void * pvParameters ) {
while (1) {
digitalWrite(2, HIGH);
delay(1000);
digitalWrite(2, LOW);
delay(1000);
}
}
这是我的代码
#include <WiFi.h>
//#include "StepperMotor.h"
#define SDA_PIN 4
#define SCL_PIN 5
const char* ssid = "StepperMotorWireless";
const char* password = "";
WiFiServer server(9090);
WiFiClient client;
char buffer[50] = {0};
int buffercounter = 0;
TaskHandle_t StepperHandler;
TaskHandle_t WifiHandler;
void setup()
{
Serial.begin(9600);
SetWifi(ssid, password);
pinMode(2, OUTPUT);
xTaskCreatePinnedToCore(
StepperLoop, /* Task function. */
"StepperHandler", /* name of task. */
4000, /* Stack size of task */
NULL, /* parameter of the task */
2, /* priority of the task */
&StepperHandler, /* Task handle to keep track of created task */
1); /* pin task to core 0 */
}
void SetWifi(const char* name, const char* password)
{
WiFi.disconnect();
WiFi.mode(WIFI_AP_STA);
WiFi.softAP(name, password);
delay(2000);
IPAddress IP = WiFi.softAPIP();
Serial.print("Server IP : ");
Serial.println(IP);
server.begin();
server.setNoDelay(true);
Serial.println("Server Started");
}
void availableMessage() {
if (client && client.connected() && client.available()) {
while (client.available()) {
String message = client.readStringUntil('\n');
Serial.println(message);
char temp[50];
message.toCharArray(temp, 50);
client.flush();
}
}
}
void connectClient() {
if (server.hasClient())
{
if (client = server.available()) {
Serial.println("connected");
}
}
}
void StepperLoop( void * pvParameters ) {
digitalWrite(2, HIGH);
delay(1000);
digitalWrite(2, LOW);
delay(1000);
}
void loop()
{
connectClient();
availableMessage();
}
问题是我闪烁的 LED 不是 1 秒长,所以有什么东西打断了它(显然是 wifi,因为那是唯一的另一件事 运行)。 这很奇怪,因为你在互联网上看到的每一个东西,Wifi 任务都固定在核心 0 上,而我 运行 我的闪烁代码在核心 1 上,所以这不应该干扰。
我似乎无法解决这个问题,有人可以帮我吗?
顺便说一句,我正在使用 arduino IDE
不长闪烁1秒是什么意思?你测过时间还是可以直接看到?
你的 LED/Stepper 循环不是循环!如果你让 LED 闪烁不止一次:
void StepperLoop( void * pvParameters ) {
while (1) {
digitalWrite(2, HIGH);
delay(1000);
digitalWrite(2, LOW);
delay(1000);
}
}