我读到我需要将 ICACHE_RAM_ATTR 宏添加到中断服务例程 (ISR) 以及在我的 ESP8266 Arduino 代码中从那里调用的每个函数,以防止随机崩溃。我还找到了对宏 ICACHE_RAM_ATTR 的作用的解释,尽管我不确定该解释是否适用于 Espressif ESP8266 SDK,也适用于 ESP8266 上的 Arduino。我不明白为什么我需要将宏添加到 ISR。
第一个问题:为什么我需要将 ICACHE_RAM_ATTR 宏添加到 ISR 以及从那里调用的所有函数?
下一个问题是,如果我强制内联从 ISR 调用的函数会发生什么:
inline void doStuff() __attribute__((__always_inline__)) { // <-- necessary to add ICACHE_RAM_ATTR here?
// no more function calls here
}
void ICACHE_RAM_ATTR handleInterrupt() {
doStuff();
}
Run Code Online (Sandbox Code Playgroud)
第二个问题:我是否需要将 ICACHE_RAM_ATTR 宏添加到强制内联的函数中?
我使用的是 Windows 操作系统,尝试在 ESP8266 的 arduino IDE 中运行 .ino 代码,并在尝试将代码上传到 ESP8266 时遇到以下错误。
发生致命的 esptool.py 错误:无法配置端口,出现问题。原始消息: PermissionError(13, '连接到系统的设备无法运行。', None, 31)
我知道现在很多人都遇到这个错误。我已经使用 arduino IDE 和 esp8266 一段时间了,这是第一次出现这样的错误。我认为这与为 ESP8266 设置 arduino IDE 时安装的库或驱动程序有关。
我正在尝试使用NOD MCU ESP8266WiFi和Arduino IDE
当我运行此代码时:
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
char auth[] = "YourAuthToken";
char ssid[] = "YourNetworkName";
char pass[] = "YourPassword";
void setup(){
Serial.begin(9600);
Blynk.begin(auth, ssid, pass);
}
void loop()
{
Blynk.run();
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
fatal error: ESP8266WiFi.h: No such file or directory
#include <ESP8266WiFi.h>
^
compilation terminated.
exit status 1
Error compiling for board Arduino/Genuino Uno.
Run Code Online (Sandbox Code Playgroud) 例子:
我不知道你怎么称呼这个功能,所以我试着解释一下。例如,当您将手机连接到公共 WiFi 热点/接入点时,您会收到来自操作系统的消息,要求您接受条款/条件或您需要登录才能使用连接。当您单击此消息时,它会打开/a 浏览器并启动登录页面。
他们怎么做到的?这是 https 功能吗?
更新:(1)
它被称为俘虏门户:
强制门户技术强制网络上的 HTTP 客户端在正常使用 Internet 之前查看特殊网页(通常用于身份验证)。强制门户将 Web 浏览器转变为身份验证设备。这是通过拦截大多数数据包来完成的,无论地址或端口如何,直到用户打开浏览器并尝试访问网络。届时,浏览器将被重定向到可能需要身份验证和/或付款的网页,或者只是显示可接受的使用政策并要求用户同意。强制门户用于许多 Wi-Fi 热点,也可用于控制有线访问(例如公寓、酒店房间、商务中心、“开放式”以太网插孔)。
情况:
我想用 ESP(ESP32/ESP8266)做同样的事情,因为我开发了一个可以通过 WiFi 配置的设备。当用户连接到设备并且不必先打开浏览器、输入 IP 地址等时,这将是非常用户友好的。只需一条消息,用户可以点击它,就会启动一个主页。
在 AP 模式下,我打开了 DNS 并将所有内容重定向到主页,但这不是最佳解决方案(有时也不起作用)。为了让您了解我在做什么,这里有一些代码,我的库的一部分:
bool suStartAccessPointNetwork( String sSSIDNetworkName, String sSSIDPassword,
IPAddress sStaticIpAddress,
uint16_t iDnsPort = 0,
uint8_t iTries = 20,
uint16_t iDelay = 500
)
{
WiFi.disconnect();
suSetNetworkAccessPointMode();
delay( 1000 );
WiFi.softAPConfig( sStaticIpAddress,
sStaticIpAddress,
IPAddress( 255, 255, 255, 0 )
);
SU_WIFI_AP_ESTABLISHED = WiFi.softAP( sSSIDNetworkName.c_str(), sSSIDPassword.c_str() );
if( iDnsPort > 0 ) …Run Code Online (Sandbox Code Playgroud) 我正在创建一个涉及蓝牙和 WiFi 的应用程序。我首先将手机连接到蓝牙,并通过它传递 WiFi ssid 和密码。然后,在收到 ssid 和密码后,我尝试将其连接到 WiFi。我设法将 ssid 和密码存储到一个字符数组中。
从蓝牙发送数据后,ESP32 与 WiFi 建立连接后,蓝牙断开。我无法再次连接蓝牙,因为 WiFi 已连接,因为我通过 Bluetooth.read() 控制代码中的某些语句,所以我需要允许连接在 WiFi 和蓝牙之间共存。
该项目由 SPIFFS(闪存保存)组成。首先从蓝牙传递WiFi ssid和密码,然后,我将接收到的蓝牙数据连接到一个字符数组中,以便稍后将其连接到互联网。
\n
我首先想到添加一个回调,在设备尝试连接时发出警报,但在文档中找不到任何能够执行此操作的代码。我有一个回调函数,可以告诉我设备何时连接和断开连接。\n
\n我搜索并找到了相关内容,Menuconfig但找不到它所在的位置。\n
\n这是我正在阅读的内容:https: //www.espressif.com/sites/default/files/documentation/ESP32_FAQs__EN.pdf
5.3.2.\nHow do ESP32 Bluetooth and Wi-Fi coexist?\nIn the menuconfig menu, there is a special option called \xe2\x80\x9cSoftware controls WiFi/ \nBluetooth coexistence\xe2\x80\x9d, which is used to control the ESP32\'s Bluetooth and Wi-Fi \ncoexistence using software, thus balancing the coexistence requirement for controlling \nthe RF module by both …Run Code Online (Sandbox Code Playgroud) 我正在尝试发送AT命令以ESP8266通过Wifi与互联网建立连接。
当我发送AT和AT+RST串行显示器上命令然后我得到确定,并准备应对这似乎是完美的。
然后,我发送AT+CWLAP以获取可用wifi网络的列表,该列表也正在正确执行。
AT+CWLAP
+CWLAP:(3,"Moto",-42,"a4:70:d6:7a:fa:6c",1,25,0)
+CWLAP:(4,"PRANJAL",-95,"1c:a5:32:3d:f5:c4",1,-16,0)
+CWLAP:(2,"VIHAN",-94,"c8:3a:35:2f:1d:81",1,-21,0)
+CWLAP:(3,"Tenda",-93,"c8:3a:35:20:a9:b1",9,-4,0)
OK
Run Code Online (Sandbox Code Playgroud)
然后我寄来的AT+CWMODE?也很完美。
AT+CWMODE?
+CWMODE:1
OK
Run Code Online (Sandbox Code Playgroud)
现在,我正在尝试ESP8266使用此命令连接上面列出的Wifi,它在串行监视器上发送错误。
AT + CWJAP_DEF =“ Moto”,“ reset1234”
错误
?=IRe"Moto","reset1234"
ERROR
Run Code Online (Sandbox Code Playgroud)
谁能建议我这个问题的原因是什么?
#include "SoftwareSerial.h"
SoftwareSerial esp8266(2, 3); // RX, TX
void setup()
{
Serial.begin(9600); // serial port used for debugging
esp8266.begin(9600); // your ESP's baud rate might be different
}
void loop()
{
if(esp8266.available()) // check if the ESP is sending a message
{ …Run Code Online (Sandbox Code Playgroud) 我制作了一个简单的 Node.js 本地服务器来接收来自 ESP32 的 POST 请求并将其放入数据库中。当我使用邮递员测试时,服务器工作正常。服务器正在侦听端口 127.0.0.1:3000。我的问题是client.connect(host, port)总是返回 false。我无法连接到客户端以发出 POST 请求。
#include "Arduino.h"
#include "Arduino.h"
#include "WiFi.h"
WiFiClient client;
const IPAddress server(192,168,1,10);
const int httpPort = 3000;
const char* ssid = "******";
const char* password = "********";
void setup() {
Serial.begin(115200);
Serial.println();
Serial.println("Booted");
Serial.println("Connecting to Wi-Fi");
WiFi.begin (ssid, password);
WiFi.mode(WIFI_STA);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
yield();
}
Serial.println("WiFi connected");
if (client.connect(server,httpPort )) {
Serial.println("Client Connected");
} else {
Serial.println("No Connection");
}
void loop() {
}
Run Code Online (Sandbox Code Playgroud) 我试图使用 nodemcu、LED 和 blynk 应用程序构建一个简单的 IoT 产品。这是使用 NodeMCU 可以做的最基本的事情。但是,当我从 Blynk 库上传示例时,出现此错误。
这似乎是一个端口错误,但我仍然无法理解它。
错误信息如下:
Arduino: 1.8.9 (Windows 10), Board: "NodeMCU 1.0 (ESP-12E Module), 80 MHz, Flash, Disabled, All SSL ciphers (most compatible), 4M (no SPIFFS), v2 Lower Memory, Disabled, None, Only Sketch, 115200"
Sketch uses 279792 bytes (26%) of program storage space. Maximum is 1044464 bytes.
Global variables use 28848 bytes (35%) of dynamic memory, leaving 53072 bytes for local variables. Maximum is 81920 bytes.
esptool.py v2.6
2.6
esptool.py v2.6
Serial …Run Code Online (Sandbox Code Playgroud) 有没有好的esp8266模拟器软件可以用来自动化测试?是否可以让在 Arduino IDE 上编写的代码在这些模拟器上运行?
我尝试用 esp8266 做一个时钟新闻天气滚动字幕。但是当我上传代码时出现错误。你能帮助我吗?这是代码的一部分:(根据 MIT 许可证(版权所有 2018 David Payne))
void PiHoleClient::getPiHoleData(String server, int port) {
errorMessage = "";
String response = "";
String apiGetData = "http://" + server + ":" + String(port) + "/admin/api.php?summary";
Serial.println("Sending: " + apiGetData);
HTTPClient http; //Object of class HTTPClient
http.begin(apiGetData);// get the result (**the error code**)
int httpCode = http.GET();
//Check the returning code
if (httpCode > 0) {
response = http.getString();
http.end(); //Close connection
if (httpCode != 200) {
// Bad Response Code
errorMessage = …Run Code Online (Sandbox Code Playgroud) arduino-esp8266 ×10
esp8266 ×5
arduino ×4
arduino-ide ×3
esp32 ×2
access-point ×1
arduino-c++ ×1
arduino-uno ×1
at-command ×1
c++ ×1
esptool ×1
httpclient ×1
isr ×1
nodemcu ×1
wifi ×1