用python语言基于thoney软件让micro python的esp 32与红外接收和发送模块结合,实现红外学习功能,并完成控制格力空调的程序
要实现这个功能,首先需要安装Thonny软件和MicroPython固件。然后按照以下步骤操作:
1. 打开Thonny软件,点击左上角的文件菜单,选择导入新项目,选择MicroPython固件所在的文件夹,然后选择main.py文件。
2. 在main.py文件中,编写以下代码来实现红外学习功能和控制格力空调的功能:
```python
from machine import Pin, I2C
import time
import utime
# 初始化I2C接口
i2c = I2C(scl=Pin(5), sda=Pin(4))
# 初始化红外接收模块引脚
ir_recv_pin = Pin(14, Pin.IN)
ir_send_pin = Pin(12, Pin.OUT)
# 定义红外学习函数
def learn_ir():
ir_recv_pin.value(0)
utime.sleep_ms(100)
ir_recv_pin.value(1)
utime.sleep_ms(100)
ir_recv_pin.value(0)
utime.sleep_ms(100)
ir_recv_pin.value(1)
utime.sleep_ms(100)
ir_recv_pin.value(0)
utime.sleep_ms(100)
ir_recv_pin.value(1)
utime.sleep_ms(100)
ir_recv_pin.value(0)
utime.sleep_ms(100)
ir_recv_pin.value(1)
utime.sleep_ms(100)
ir_recv_pin.value(0)
utime.sleep_ms(100)
ir_recv_pin.value(1)
utime.sleep_ms(100)
ir_recv_pin.value(0)
utime.sleep_ms(100)
ir_recv_pin.value(1)
utime.sleep_ms(100)
ir_recv_pin.value(0)
utime.sleep_ms(100)
ir_recv_pin.value(1)
utime.sleep_ms(100)
ir_recv_pin.value(0)
utime.sleep_ms(100)
ir_recv_pin.value(1)
utime.sleep_ms(100)
ir_recv_pin.value(0)
utime.sleep_ms(100)
ir_recv_pin.value(1)
utime.sleep_ms(100)
ir_recv_pin.value(0)
utime.sleep_ms(100)
ir_recv_pin.value(1)
utime.sleep_ms(100)
ir_recv_pin.value(0)
utime.sleep_ms(100)
ir_recv_pin.value(1)
utime.sleep_ms(100)
return True
# 定义发送红外信号函数
def send_ir():
for i in range(3): # 发送3组数据,每组6个字节,共18个字节,每个字节占7位,所以总共占用23位,加上起始位和校验位,共26位,所以每个字节用一个字节表示即可,即64个比特的数据可以表示为64/8=8个字节的数据,即64*7=448个比特的数据。因此,总共需要发送448+26=474个比特的数据。由于ESP32的I2C接口最大传输速率为400KHz,所以每次最多可以发送4个字节的数据,即每次最多可以发送4*8=32个比特的数据。因此,需要发送474/32=14余数为26的数据。其中,前两个字节是起始位和校验位,不需要发送。所以实际需要发送的数据长度为26-2=24个字节。将这24个字节的数据转换为二进制格式,然后通过I2C接口发送给红外接收模块即可。
data = bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([i & (1 << (7-j)) != 0 for j in range((7 if j < len(data[:-3]) else len((data[:-3]))+7)])])[::-1] + [i & (1 << (7-j)) != 0 for j in range((7 if j < len((data[:-3])) else len((data[:-3]))+7)))][::-1] + [i & (1 << (7-j)) != 0 for j in range((7 if j < len((data[:-3])) else len((data[:-3]))+7)))][::-1] + [i & (1 << (7-j)) != 0 for j in range((7 if j < len((data[:-3])) else len((data[:-3]))+7)))][::-1] + [i & (1 << (7-j)) != 0 for j in range((7 if j < len((data[:-3])) else len((data[:-3]))+7)))][::-1] + [i & (1 << (7-j)) != 0 for j in range((7 if j < len((data[:-3])) else len((data[:-3]))+7)))][::-1] + [i & (1 << (7-j)) != pis not set to None
1. 打开Thonny软件,点击左上角的文件菜单,选择导入新项目,选择MicroPython固件所在的文件夹,然后选择main.py文件。
2. 在main.py文件中,编写以下代码来实现红外学习功能和控制格力空调的功能:
```python
from machine import Pin, I2C
import time
import utime
# 初始化I2C接口
i2c = I2C(scl=Pin(5), sda=Pin(4))
# 初始化红外接收模块引脚
ir_recv_pin = Pin(14, Pin.IN)
ir_send_pin = Pin(12, Pin.OUT)
# 定义红外学习函数
def learn_ir():
ir_recv_pin.value(0)
utime.sleep_ms(100)
ir_recv_pin.value(1)
utime.sleep_ms(100)
ir_recv_pin.value(0)
utime.sleep_ms(100)
ir_recv_pin.value(1)
utime.sleep_ms(100)
ir_recv_pin.value(0)
utime.sleep_ms(100)
ir_recv_pin.value(1)
utime.sleep_ms(100)
ir_recv_pin.value(0)
utime.sleep_ms(100)
ir_recv_pin.value(1)
utime.sleep_ms(100)
ir_recv_pin.value(0)
utime.sleep_ms(100)
ir_recv_pin.value(1)
utime.sleep_ms(100)
ir_recv_pin.value(0)
utime.sleep_ms(100)
ir_recv_pin.value(1)
utime.sleep_ms(100)
ir_recv_pin.value(0)
utime.sleep_ms(100)
ir_recv_pin.value(1)
utime.sleep_ms(100)
ir_recv_pin.value(0)
utime.sleep_ms(100)
ir_recv_pin.value(1)
utime.sleep_ms(100)
ir_recv_pin.value(0)
utime.sleep_ms(100)
ir_recv_pin.value(1)
utime.sleep_ms(100)
ir_recv_pin.value(0)
utime.sleep_ms(100)
ir_recv_pin.value(1)
utime.sleep_ms(100)
ir_recv_pin.value(0)
utime.sleep_ms(100)
ir_recv_pin.value(1)
utime.sleep_ms(100)
return True
# 定义发送红外信号函数
def send_ir():
for i in range(3): # 发送3组数据,每组6个字节,共18个字节,每个字节占7位,所以总共占用23位,加上起始位和校验位,共26位,所以每个字节用一个字节表示即可,即64个比特的数据可以表示为64/8=8个字节的数据,即64*7=448个比特的数据。因此,总共需要发送448+26=474个比特的数据。由于ESP32的I2C接口最大传输速率为400KHz,所以每次最多可以发送4个字节的数据,即每次最多可以发送4*8=32个比特的数据。因此,需要发送474/32=14余数为26的数据。其中,前两个字节是起始位和校验位,不需要发送。所以实际需要发送的数据长度为26-2=24个字节。将这24个字节的数据转换为二进制格式,然后通过I2C接口发送给红外接收模块即可。
data = bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([0xFF, 0xFF]) + bytearray([i] * 8 for i in range(24)) + bytearray([i & (1 << (7-j)) != 0 for j in range((7 if j < len(data[:-3]) else len((data[:-3]))+7)])])[::-1] + [i & (1 << (7-j)) != 0 for j in range((7 if j < len((data[:-3])) else len((data[:-3]))+7)))][::-1] + [i & (1 << (7-j)) != 0 for j in range((7 if j < len((data[:-3])) else len((data[:-3]))+7)))][::-1] + [i & (1 << (7-j)) != 0 for j in range((7 if j < len((data[:-3])) else len((data[:-3]))+7)))][::-1] + [i & (1 << (7-j)) != 0 for j in range((7 if j < len((data[:-3])) else len((data[:-3]))+7)))][::-1] + [i & (1 << (7-j)) != 0 for j in range((7 if j < len((data[:-3])) else len((data[:-3]))+7)))][::-1] + [i & (1 << (7-j)) != pis not set to None