在网上搜索esp8266+micropython的红外发射库,没找到,发现
接收库是有的,可以参考:基于MicroPython的ESP8266连接外设IO(二)_micropython 红外接收-CSDN博客
可惜没有发射,很不方便。
这里都有介绍,最大1KHZ:
https://www.cnblogs.com/iBoundary/p/11987436.html
PWM(12, freq=500, duty=512)这种方式控制的PWM 频率最高也只能到1KHZ,到这很多人就放弃了使用这种方式控制红外发射了,这个频率只能用来控制舵机和电调啥的了,根本不能用于红外发射啊,或者换开发板使用pico或STM32,无奈手上esp8266开发板太多,只能硬头皮上了,还在闲鱼上买了个示波器(真是为了一盘醋包饺子啊)。又是花钱的一天。造孽啊!
先上代码,有几种加快esp8266程序执行的方法(当然是在micropython上)一种是改时钟频率,machine.freq(160000000),试了没效。
还有测试esp8266速度的帖子:https://www.cnblogs.com/yafengabc/p/11197001.html
这个逻辑分析仪都用上了,刚开始准备买逻辑分析仪的,最后买了个示波器(捂脸)。
最后终于找到了这篇帖子(MicroPython入坑记(三)板子上的Python到底有多快?),给了灵感:https://www.cnblogs.com/yafengabc/p/8681713.html
感谢作者!
最后我的代码:
import irsend_hx
from machine import Pin
import time
irsend = irsend_hx.IRSEND(Pin(14))#对应nodemcu引脚D5
if __name__ == "__main__":
cmdlist=[8880,4470, 530,570, 530,570, 530,1670, 530,620, 480,620, 530,570, 530,1670, 530,570, 530,1720, 480,1720, 530,570, 530,1670, 530,1670, 530,1720, 530,570, 530,1670, 530,1670, 530,1720, 480,620, 530,570, 530,570, 530,570, 530,1670, 530,620, 480,620, 530,570, 530,1670, 530,1670, 530,1720, 480,1720, 530,570, 530,1670, 530]
while True:
# time.sleep(1)
# irsend.send_hexstr("22DDC23D")
# time.sleep(1)
# irsend.send_bitstr("00100010110111011100001000111101")
time.sleep(1)
irsend.send_raw(cmdlist)
print("send ok")
最后记录一下示波器调试的过程:
端口输出红外控制频率35KHZ,勉强可以被红外接收头识别到,会存在概率接收失败的情况
9ms+4.5ms引导码,+32bit NEC数据:
最后的测试库和 源码下载地址:https://download.csdn.net/download/es15071848238/89529369
演示代码里用的是Pin14,对应nodemcu端口是D5,可以自行更改