模块上搭载了红外接收头、红外发射以及编码芯片。主要功能:python
一、具有红外发射功能。git
二、具有红外编码功能。github
三、带红外发射头扩展接口。工具
四、具有串口通讯功能,通讯电平为TTL。学习
五、可控制红外格式设备,包括电视机、电风扇等电子电器设备。编码
六、支持编码芯片spa
七、可做为红外无线数据通讯、数据传输、红外控制等功能调试
该模块使用方法很是简单,只须要掌握基本的单片机TTL串口通讯知识便可。将模块与开发板进行串口链接,经过串口发送指定的指令进行控制模块发射;经过串口接收方式进行红外解码操做,获取遥控编码信息。blog
解码教程
解码时不须要发送任何指令,只须要拿起遥控对准模块的接收头按下某一个键,这时模块的串口就会输出该键的红外编码值给开发板,开发板只要从串口里读取到数据,进行分析就会得出按下的是哪个键。
编码(发射)
编码时须要根据必定格式发送指令,经过串口发送5个字节的指令,就能够将对应编码的红外信号发送出去。利用这红外的收发功能,咱们能够作红外数据传输和控制,使用2个就能够完成收发操做了。
红外解码/编码模块相关资料 下载
本次教程仅来学习解码功能。开发板写个串口读取的程序,先来看下遥控器按下以后,咱们到底能接收到什么样的数据。这里,咱们选取开发板UART3(TX-Y9,RX-Y10)。
接线图
TPYBoard v102 | 红外解/编码模块 |
VIN | 5V |
Y10 | TXD |
Y9 | RXD |
GND | GND |
from pyb import UART uart = UART(3,9600,timeout=50) while True: if uart.any() > 0: print(uart.read())
程序保存后运行,打开PuTTY工具,按下遥控器左上角的第一个键CH-。
PuTTY打印:
b'\x00\xffE'
micropython进行串口读取时,返回的是bytes类型,是一种不可变序列,跟字符串相似。返回了3个字节的内容,多按几个键你就会发现,前面2个字节是用户码固定不变,也就是说咱们只要判断第3个字节就能够找到对应的键。bytes中能够直接经过索引来获取元素,也支持负数的索引。好比-1,就是从右向左数的第一个,依次类推。这里须要注意一点,获取某个元素时,他返回的是对应的十进制的数值。
例如:
>>> b = b'\x00\xffE' >>> b[1] 255 >>> b[-1] 69
咦?最后一个元素E为何是69呢?这是由于在bytes保存的就是原始的字节(二进制格式)数据,它会将一些16进制的值转换为对应的ascii字符。ascii中大写的E对应的十进制就是69。若是你用电脑接红外解编码模块的话,串口调试助手里打印的就应该是 00 FF 45。
根据上面的经验,总结了键值对应关系表,你们能够直接拿到程序中用。
接下来,结合舵机作个实例。用遥控器上的|<<快进键和快退键>>|,控制舵机进行正反方向的转动。micropython中Servo类使用参考 点击查看
TPYBoard v102 | 舵机 |
VIN | 电源正极(红色线) |
X1 | 信号线(橙色线) |
GND | 电源负极(棕色线) |
首先,将舵机经过程序设置到0角度的状态,安上个小翅子方便查看转动效果。
from pyb import Servo #舵机信号线接X1,能够建立4个Servo,分别是1~4,对应的引脚是X1~X4 s1 = Servo(1) #调整舵机转动到0角度的位置 s1.angle(0)
程序增长上对按键的判断,每按一次转动15度,总体代码以下。
from pyb import UART,Servo #舵机信号线接X1,能够建立4个Servo,分别是1~4,对应的引脚是X1~X4 s1 = Servo(1) #调整舵机转动到0角度的位置 s1.angle(0) uart = UART(3,9600,timeout=10) def setServoTurn(flag): turn_angle = s1.angle() if flag: #逆时针 值递增 最大值90度 turn_angle += 15 #每按一次转15度 if turn_angle <= 90: s1.angle(turn_angle) else: #顺时针 值递减 最小值-90度 turn_angle -= 15 if turn_angle >= -90: s1.angle(turn_angle) while True: if uart.any() > 0: val = uart.read()[-1] if val == 68: setServoTurn(True) elif val == 64: setServoTurn(False)