关于到期yield()日,Arduino文档在https://www.arduino.cc/en/Reference/Scheduler上解释.显然它是Scheduler库的一部分:
#include <Scheduler.h>
Run Code Online (Sandbox Code Playgroud)
但是,我可以调用yield()我的Nano或ESP8266而不包括Scheduler lib - 但仅限于我的主程序,而不是包含文件.此外,包含不适用于我的非会费.
我错过了yield()什么秘密,或者yield()除了Due之外在Arduino平台上做了什么?
我的设置包括使用eclipse的Espressif SDK和nodemcu,我想用C编程.
我已经完成了他所有的步骤,我可以从eclipse环境中编译和刷新电路板.我不按任何按钮来加载闪光灯,因为电路板可以自己处理(至少这是我读到的).根据这显然我有一个nodemcu 0.9,但我看到的板看起来不像图中的那个(微带天线看起来很奇怪......而在板的背面它说www.doit.am ESP12E devkit V2 ......我的天线甚至看起来都不像板子后面的网站上的天线.
我看着一切都继续前进.我在espressif上编写了一个眨眼的例子并将其闪现.我看到它创建了eagle.flash.bin和eagle.irom0text.bin并分别将它们加载到0x00000和0x10000(根据我读过的文档,这是可以的).当我重置电路板时,我可以看到它确实闪烁,并且由于LED闪烁,因此其中有一个程序.然后我尝试了hello_world示例.一切都相应的,我重置电路板后,我看到led继续以相同的频率闪烁,当我通过espressif提供的terminal.exe连接到电路板时,我只能在输出中看到垃圾,即使波特是根据代码更正(即便如此,我在terminal.exe中尝试了所有不同的bauds).
好的......然后我又回到了眨眼的例子,增加了眨眼之间的延迟.闪烁它,频率保持不变.我知道它创建了新的.bin文件,但仍然没有改变.这促使我创建了一个新项目.我是按照米哈伊尔·格里戈列夫提供的指示做到的.我只是放了一个无限循环,期望什么都没有,但是在刷新新编译的固件之后,我仍然可以看到LED以相同的频率闪烁,即使代码中没有任何内容,我甚至在之前擦过闪存(是的,我确认闪光灯是空的).
所以这导致我测试我可以编译的每个例子.我注意到有些人没有眨眼导致其他人这样做,就像什么都没发生一样.之后我下载了nodemcu固件,加载后我注意到它工作正常,我甚至可以在可用的wifi网络中看到ESP.
我真的不明白发生了什么.为什么有些例子有用而其他例子没有?为什么我不能修改一个简单的blinky的源代码并看到更改?我更喜欢以这种方式使用esp模块,因为我不喜欢arduino接口或者它使用静态设置和循环函数的方式,我不想在LUA中编程它.
我甚至检查了espressif提供的makefile,我能看到的唯一区别是BOOT和APP变量.我甚至尝试修改它们,但仍然没有变化.
有谁能够帮我?
我的devkit是一个Amica V3,其中有两个,似乎都有同样的问题.
我试图让设备出现,然后才能安装NodeMCU固件.
我在不同的计算机和不同的操作系统(Windows 7/10 + OS X 10.11.4)上做了这个,每次都确保我首先安装了SiLabs CP210X驱动程序.在任何地方都没有devkit的迹象......当我拔下它并将其插回WiFi天线附近的LED时闪烁然后什么都没有.我按了RST几次,短/长,没什么.
我真的希望你告诉我,我是愚蠢的,我应该有RTFM,所以当你第一次闪光时,我不会错过为电路板提供额外的电源......但我怀疑是这种情况.
我正在研究家庭自动化项目,我想将移动应用程序连接到ESP8266.
我可以将消息从移动应用程序发布到设置为代理的AWS服务器.(工作)
我可以将消息从AWS发布到Raspberry PI.(工作)
我还可以将Raspberry PI的Mqtt消息发布到NodeMCU/ESP8266.(工作).
但是当我试图将所有这些设置在一起时,问题就出现了.从AWS发布消息时,Raspberry PI会收到该消息,但它不会反映在NodeMCU/ESP8266上.
这就是我在ESP8266中使用的内容.当我从Raspberry PI发布时它工作正常,即使我在我的移动设备上连接PI将MQTT客户端应用程序正常工作.但是当我从AWS发布时,ESP8266没有任何反应,但PI能够接收消息.
我读到我需要将 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 时安装的库或驱动程序有关。
我正在尝试将Apple homekit连接到nodemcu板,我发现了一个可以在我的计算机上运行的教程,但我很想知道是否有任何方法可以在NodeMCU板(ESP8266)上加载和运行Node.JS?
我正在研究使用ESP8266和ESP8266WiFi库阅读网页的简单问题.
我在示例中仅更改了几行,但不知道问题是什么.那是我的代码:
include <ESP8266WiFi.h>
const char* ssid = "WiwoNET";
const char* password = "xxxxxxx";
const char* host = "https://pure-caverns-1350.herokuapp.com";
void setup() {
Serial.begin(115200);
delay(10);
// We start by connecting to a WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
int value = 0;
void loop() {
delay(5000);
++value;
Serial.print("connecting to ");
Serial.println(host);
// Use WiFiClient class to create TCP connections …Run Code Online (Sandbox Code Playgroud) 使用RobotDyn的RobotDyn ESP8266PRO版本.
首先,没有制造商提供的文档.
据我所知:
python esptool.py --port /dev/ttyUSB0 write_flash -fm dio -fs 32m 0x00000 nodemcu-master-12-modules-2016-11-17-02-07-27-integer.bin 0x3fc000 esp_init_data_default.bin结果: fatal error: Digest mistmatch
有人成功了解这件事吗?
我写使用一些简单的代码MicroPython上Digistump橡树,这基本上是一个ESP8266接口板运行.我试图了解通过i2c定期读取传感器时看到的行为.
下面的代码(读取ACCEL_XOUT_H和ACCEL_XOUT_L寄存器的值)工作得很好:
>>> from machine import Pin, I2C
>>> bus = I2C(scl=Pin(2), sda=Pin(0))
>>> while True:
... h, l = bus.readfrom_mem(0x68, 0x3b, 2)
... print (-((((h<<8)+l)^0xFFFF) + 1) if (h & (1<<7)) else (h<<8)+l)
Run Code Online (Sandbox Code Playgroud)
(该print语句只是从两个补码执行转换.)
正如预期的那样,当我移动imu时,打印出的加速度计值大致实时变化.
但如果我在循环中引入延迟,例如...
>>> import time
>>> from machine import Pin, I2C
>>> bus = I2C(scl=Pin(2), sda=Pin(0))
>>> while True:
... h, l = bus.readfrom_mem(0x68, 0x3b, 2)
... print (-((((h<<8)+l)^0xFFFF) + 1) if (h & (1<<7)) else (h<<8)+l)
... time.sleep(1) …Run Code Online (Sandbox Code Playgroud) esp8266 ×10
nodemcu ×5
arduino ×4
arduino-ide ×1
c ×1
eclipse ×1
esptool ×1
http ×1
isr ×1
micropython ×1
mpu6050 ×1
mqtt ×1
node.js ×1
raspberry-pi ×1