在網上搜索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,可以自行更改