标签: arduino-esp8266

ESP8266/Arduino:为什么需要将 ICACHE_RAM_ATTR 宏添加到 ISR 和从那里调用的函数?

我读到我需要将 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 宏添加到强制内联的函数中?

arduino isr esp8266 arduino-esp8266

10
推荐指数
1
解决办法
1万
查看次数

发生致命 esptool.py 错误:无法配置端口。PermissionError(13, '连接到系统的设备无法运行。', None, 31)

我使用的是 Windows 操作系统,尝试在 ESP8266 的 arduino IDE 中运行 .ino 代码,并在尝试将代码上传到 ESP8266 时遇到以下错误。

发生致命的 esptool.py 错误:无法配置端口,出现问题。原始消息: PermissionError(13, '连接到系统的设备无法运行。', None, 31)

我知道现在很多人都遇到这个错误。我已经使用 arduino IDE 和 esp8266 一段时间了,这是第一次出现这样的错误。我认为这与为 ESP8266 设置 arduino IDE 时安装的库或驱动程序有关。

  • 尝试从我的笔记本电脑上断开 ESP8266 并将其重新连接到另一个 USB 端口。
  • 尝试使用 RESET 按钮重置 esp8266,检查是否是硬件原因。
  • 尝试以管理员身份运行 Arduino IDE。

esp8266 arduino-esp8266 esptool permissionerror

9
推荐指数
3
解决办法
7万
查看次数

Arduino IDE无法找到ESP8266WiFi.h文件

我正在尝试使用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)

arduino-ide arduino-esp8266

8
推荐指数
3
解决办法
5万
查看次数

ESP:操作系统自动登录/接受消息,并重定向到公共 WIFI 门户访问点等页面

例子:

我不知道你怎么称呼这个功能,所以我试着解释一下。例如,当您将手机连接到公共 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)

c++ wifi access-point arduino-esp8266

7
推荐指数
1
解决办法
7369
查看次数

让 ESP32 WiFi/蓝牙协同工作

我正在创建一个涉及蓝牙和 WiFi 的应用程序。我首先将手机连接到蓝牙,并通过它传递 WiFi ssid 和密码。然后,在收到 ssid 和密码后,我尝试将其连接到 WiFi。我设法将 ssid 和密码存储到一个字符数组中。

从蓝牙发送数据后,ESP32 与 WiFi 建立连接后,蓝牙断开。我无法再次连接蓝牙,因为 WiFi 已连接,因为我通过 Bluetooth.read() 控制代码中的某些语句,所以我需要允许连接在 WiFi 和蓝牙之间共存。

\n

该项目由 SPIFFS(闪存保存)组成。首先从蓝牙传递WiFi ssid和密码,然后,我将接收到的蓝牙数据连接到一个字符数组中,以便稍后将其连接到互联网。

\n


我首先想到添加一个回调,在设备尝试连接时发出警报,但在文档中找不到任何能够执行此操作的代码。我有一个回调函数,可以告诉我设备何时连接和断开连接。\n

\n我搜索并找到了相关内容,Menuconfig但找不到它所在的位置。\n
\n这是我正在阅读的内容:https: //www.espressif.com/sites/default/files/documentation/ESP32_FAQs__EN.pdf

\n
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)

arduino arduino-esp8266 arduino-c++ esp32

7
推荐指数
1
解决办法
2万
查看次数

向ESP8266发送AT + CWJAP_DEF命令出错

我正在尝试发送AT命令以ESP8266通过Wifi与互联网建立连接。

当我发送ATAT+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)

arduino at-command arduino-uno esp8266 arduino-esp8266

6
推荐指数
2
解决办法
3471
查看次数

ESP32/ESP8266 使用 WiFi 连接到本地服务器

我制作了一个简单的 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)

arduino arduino-ide esp8266 arduino-esp8266 esp32

6
推荐指数
1
解决办法
1万
查看次数

如何使用 NodeMCU 和 arduino ide 修复“SerialTimeoutException:写入超时”错误

我试图使用 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)

arduino-ide nodemcu arduino-esp8266

6
推荐指数
2
解决办法
4万
查看次数

是否有用于测试在 Arduino IDE 上编写的代码的 esp8266 模拟器?

有没有好的esp8266模拟器软件可以用来自动化测试?是否可以让在 Arduino IDE 上编写的代码在这些模拟器上运行?

esp8266 arduino-esp8266

6
推荐指数
2
解决办法
6099
查看次数

错误:调用使用属性声明的“HTTPClient::begin”错误:过时的 API,使用 ::begin(WiFiClient, url)

我尝试用 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)

httpclient arduino-esp8266

6
推荐指数
1
解决办法
5万
查看次数