红外遥控芯片5104编码采用等长编码,就是说每一位所占据的信号长度是相同的而且没有引导码,但每次发射采用多次发射,信号间隔为4位长度大约7000us.(我是用螺丝刀把遥控器拆开,才找到芯片型号的)。程序在mpython 0.33下调试通过。
Code: Select all
from mpython import *
from machine import *
import time
# 本驱动只支持红外遥控芯片 5104
# 格力电扇遥控键码
# 网上搜HS5104或5104可查阅芯片相关信息
class IRsender:
def __init__(self, pin):
self.pwm = MPythonPin(pin, PinMode.PWM).pwm
self.pwm.freq(38000)
self.pwm.duty(0)
self.code5104()
def code5104(self):
self._code = [0]*5
code_prev = [1,1,0,1,1]
self._code[0] = code_prev + [0,0,0,0,0,0,0]
self._code[1] = code_prev + [0,0,0,0,0,1,0]
self._code[2] = code_prev + [0,0,0,0,1,0,0]
self._code[3] = code_prev + [0,0,0,1,0,0,0]
self._code[4] = code_prev + [0,0,1,0,0,0,0]
# 将信息转成信号时间的长短
def lock(self, code_num):
vlist = []
tlist = self._code[code_num]
for i in range(len(tlist)):
if tlist[i] == 0:
vlist += [[422, 1266]]
else:
vlist += [[1266, 422]]
return vlist
def send(self, code_num,repeat_num):
vlist = self.lock(code_num)
for i in range(repeat_num):
for t in vlist:
self.pwm.duty(340)
time.sleep_us(t[0])
self.pwm.duty(0)
time.sleep_us(t[1])
self.pwm.duty(0)
time.sleep_us(7000)
if __name__ == "__main__":
s = IRsender(1)
while 1:
# 开关家里的电风扇
s.send(1,3)
sleep(2000)
s.send(2,3)
sleep(2000)