IOT

2019-01-04

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 支持包

步骤:

  1. 打开 Arduino IDE

  2. 菜单栏:文件 > 首选项

  3. 在“附加开发板管理器网址”中添加以下地址:

    http://arduino.esp8266.com/stable/package_esp8266com_index.json
    
  4. 点击 工具 > 开发板 > 开发板管理器

  5. 搜索 esp8266,安装 esp8266 by ESP8266 Community


✅ 3. 安装所需库

打开 Arduino IDE:

  • 菜单栏点击:工具 > 管理库

安装以下库:

  1. IRremoteESP8266
  2. 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 实际是 GPIO5
  • D5 实际是 GPIO14
  • 如果使用 D1D5 等定义,请确保你选择的开发板支持这些别名(如 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

📦 如果你用 PlatformIO 也可以刷入