IOT
ESP8266
模拟输出 Analog output
analogWrite(pin, value)
在已有的引脚上使能软件PWM功能。PWM可以用在引脚0~16。调用analogWrite(pin, 0) 可以关闭引脚PWM。取值范围:0~ PWMRANGE,默认为1023。 PWM 范围可以使用analogWriteRange(new_range)语句来更改。
PWM 默认频率:1KHz。使用analogWriteFreq(new_frequency) 可以更改频率。
ESPEASY
定时触发hooks脚本
on WiFi#Connected do
timerSet,1,10
endon
On Rules#Timer=1 do
SendToHTTP malu.me,80,/iot?domain=iotd1&ip=%ip%
timerSet,1,100
endon
定时睡眠
要启用深度睡眠,我们需要将RST引脚连接到ESP8266上的GPIO 16,在NodeMCU上,GPIO 16表示为D0;在D1上,GPIO 16表示为D2。
如果没有连接,将无法自动唤醒!!!
On System#Boot do
timerSet,2,60
endon
On Rules#Timer=2 do //When Timer2 expires, do 启动60秒后,进入深度睡眠10秒,再启动,重复
deepsleep,10
endon
手动唤醒设备:RST拉至GND
擦除配置
在内存0x200000处写入空文件:
MQTT控制
controllers -> 编辑第一个 -> Protocol选择OpenHAB MQTT
发布主题,即为控制端 Controller Subscribe: /%sysname%/#
比如发布一个主题:/test01/GPIO/2 Payload:0 ,给GPIO2低电平
接收主题,即为信号返回 Controller Publish: /%sysname%/%tskname%/%valname%
比如根据上面接收地址为:/test01/esp01/Switch
esp01为:devices -> task name为esp01
Switch为:其Values的name
esp_wifi_repeater
官网:https://github.com/martin-ger/esp_wifi_repeater
注意!!!每次配置最好save一下。
中继基本配置:
set ssid xxx
set password xxx
save
set automesh 1
// set am_threshold dB:设置“坏”连接的阈值(以dB为单位,默认为85,即-85 dB)
// set hw_reset GPIOno:选择GPIO引脚进行硬件恢复出厂设置(> 16禁用,默认)
show
show stats // 查看状态信息
save
reset
MQTT配置:
set mqtt_host xxx
set mqtt_port xxx
// 查看mqtt配置(会显示出MQTT Client Id等信息)
show mqtt
MQTT Client Id: ESPRouter_xxx
默认命令发布地址是:/WiFi/ESPRouter_xxx/command
接收命令(订阅)地址是:/WiFi/ESPRouter_xxx/system/response
接收所有节点和链接信息:/WiFi/ESPRouter_xxx/system/Topology
set mqtt_interval secs:设置路由器发布状态主题的时间间隔(默认值:15s,0禁用状态发布)
automesh最优路径网状树,根据rssi信号强度自动生成树状网络;
经测试,如果大量相同SSID的AP集中在某个位置,该算法会频繁切换网络,导致wifi不稳定,此时可以尝试减小am_threshold阈值,比如50。
安全配置:
lock xxx // 锁定修改
unlock xxx // 解锁修改
set config_port portno:设置控制台登录的端口号(默认为7777,0 禁用远程控制台配置)
set web_port portno:设置Web配置服务器的端口号(默认为80,0 禁用Web配置)
set config_access mode:控制允许控制台和Web配置访问的网络(0:无访问权限,1:仅内部,2:仅外部,3:两者(默认))
性能调优:
为提高吞吐率,可以把CPU频率调高:
set speed [80|160] :设置CPU时钟频率(默认为80 Mhz)
测量功耗:
循环中80Mhz 89 - 90mA
循环后空闲 33 - 34mA
循环中160Mhz 94.8 - 95mA
循环后空闲 34 - 35mA
Arduino
板载LED灯
引脚值:GPIO 13
ESP8266板载LED为:GPIO 2
全局常量:
#define LED_BUILTIN 13
高电平时点亮:
void setup() {
pinMode(13, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
}
安装过程
要将这段 Arduino 代码刷入到 ESP8266(如 NodeMCU、Wemos D1 等板子),请按以下步骤操作:
✅ 1. 安装 Arduino IDE(如已安装请跳过)
官网下载地址: 🔗 https://www.arduino.cc/en/software
✅ 2. 安装 ESP8266 支持包
步骤:
-
打开 Arduino IDE
-
菜单栏:文件 > 首选项
-
在“附加开发板管理器网址”中添加以下地址:
http://arduino.esp8266.com/stable/package_esp8266com_index.json
-
点击 工具 > 开发板 > 开发板管理器
-
搜索
esp8266
,安装 esp8266 by ESP8266 Community
✅ 3. 安装所需库
打开 Arduino IDE:
- 菜单栏点击:工具 > 管理库
安装以下库:
IRremoteESP8266
-
Servo
(ESP8266 专用的ServoESP8266
也可以)- 如果出现冲突,可以替代为
ServoESP8266
- 如果出现冲突,可以替代为
✅ 4. 选择开发板和端口
在 Arduino IDE 设置如下:
-
工具 > 开发板 选择你的 ESP8266 型号,如:
- NodeMCU 1.0 (ESP-12E Module)
- 或 Wemos D1 R1 / Mini
-
工具 > 端口 选择你的串口(通常是 COMx)
✅ 5. 连接开发板
使用 USB 数据线 将 ESP8266 连接电脑。
✅ 6. 将代码粘贴到 Arduino IDE
粘贴你提供的完整代码。
✅ 7. 编译 & 上传
点击:
- ✅ 验证(√):检查代码能否编译
- ⬆️ 上传:将代码刷入 ESP8266
上传成功后,ESP8266 会自动运行程序。
🛠️ 注意事项:
💡 引脚问题:
D1
实际是 GPIO5D5
实际是 GPIO14- 如果使用
D1
、D5
等定义,请确保你选择的开发板支持这些别名(如 NodeMCU) - 否则建议使用原始 GPIO 编号,例如:
servo.attach(5); // 等价于 D1
const uint16_t kRecvPin = 14; // D5
💡 舵机供电:
- 舵机建议单独供电(例如 5V 电源),ESP8266 GPIO 驱动能力弱,可能不够。
💡 IR 接收器:
- 将红外接收模块的 OUT 脚连接到 D5(GPIO14)
- VCC -> 3.3V(部分模块支持 5V)
- GND -> GND