搜索
bottom↓
回复: 0

《ESP32-S3使用指南—MicroPython版 V1.0》第二十二章 红外发送实验

[复制链接]

出0入234汤圆

发表于 昨天 09:27 | 显示全部楼层 |阅读模式
2.jpg
1)实验平台:正点原子ESP32S3开发板
2)购买链接:https://detail.tmall.com/item.htm?id=768499342659
3)全套实验源码+手册+视频下载地址:http://www.openedv.com/thread-347618-1-1.html
4)正点原子官方B站:https://space.bilibili.com/394620890
5)正点原子手把手教你学ESP32S3快速入门视频教程:https://www.bilibili.com/video/BV1sH4y1W7Tc
6)正点原子FPGA交流群:132780729
1.png
3.png

第二十二章 红外发送实验


       前上一章中,我们通过红外接收头来接收遥控器发过来的红外信号,在本章,我们将向大家介绍如何通过红外发射头来发送红外信号,同时来模拟我们的红外遥控器。正点原子ESP32-S3开发板板载了一个红外发射头,我们可以通过软件编程来直接实现红外信号的发送,同时我们利用上一章红外接收实验来实现开发板的红外信号自发自收功能。
       本章分为如下几个小节:
       22.1 红外发射简介
       22.2 emission类
       22.3 硬件设计
       22.4 程序设计
       22.5 下载验证

       22.1 红外发射简介
       在上一章中,我们已经讲解了红外遥控器的原理,这里请大家参考上一章的内容进行学习。我们将使用正点原子ESP32-S3开发板上的板载红外发射头来模拟红外遥控器的功能,从而实现开发板上的红外信号自发自收功能。

       22.2 NEC类
       在工程中,名为emission.py的脚本是由一位博主编写的用于发送红外编码数据的Python脚本。该脚本包含用于发送红外编码数据的函数和程序代码。请注意,该脚本的相关原理和实现细节可能需要一定的背景知识和理解才能完全理解。因此,建议读者在阅读和理解该脚本之前,先自行了解有关红外编码协议的相关原理和基础知识。

       1,NEC类的构造方法
       remote的构造对象方法如下:
  1. class NEC(pin, cfreq)
  2. 使用示例:nec = NEC(Pin(8, Pin.OUT, value = 0), 38000)
复制代码
       该构造方法的参数描述,如下表所示。

1.png
表22.2.1 NEC构造方法参数描述

       返回值:NEC对象。

       2,NEC类的方法

       ①:发送红外编码
       其函数原型如下:
  1. nec.transmit()
复制代码
       返回值:无。

       22.3 硬件设计


       1. 例程功能
       本章实验功能简介:开机后在 LCD 上显示一些信息,然后等待红外接收触发解码,在死循环里面,我们利用红外发射头发送键值(每 1000ms 加 1),同时在 LCD 上显示当前发送键值与接收到的键值,来观察自发自收情况。其中 LED用来指示程序运行状态。

       2. 硬件资源

       1)XL9555
              IIC_INT-IO0(需在P5连接IO0)
              IIC_SDA-IO41
              IIC_SCL-IO42

       2)SPILCD
              CS-IO21
              SCK-IO12
              SDA-IO11
              DC-IO40(在P5端口,使用跳线帽将IO_SET和LCD_DC相连)
              PWR- IO1_3(XL9555)
              RST- IO1_2(XL9555)

       3)红外接收头
              REMOTE_IN-IO2

       4)红外发送头
              REMOTE_OUT-IO8

       3. 原理图
       红外发射头已经在ESP32-S3开发板上板载不需要外接,它与ESP32-S3的IO8连接,原理图如 下图所示。

第二十二章 红外发送实验1193.png
图22.3.1 红外发射头与ESP32-S3连接的原理图

       需要注意:REMOTE_OUT并没有直接与ESP32-S3芯片的引脚相连,而是需要在P3端口处使用跳线帽将REMOTE_OUT和ADC_IN连接起来,P3端口的原理图以及实物连接方式如下所示:

第二十二章 红外发送实验1321.png
图22.3.2 P3端口原理图

第二十二章 红外发送实验1339.png
图22.3.3 P3实物连接方式

       开发板上接收红外遥控器信号的红外管外观如图27.2.3所示。使用时需要遥控器有红外管的一端对准开发板上的红外管才能正确收到信号。

第二十二章 红外发送实验1423.png
图22.3.4 开发板上的红外发送管位置

       22.4 程序设计

       22.4.1 程序流程图
       程序流程图能帮助我们更好的理解一个工程的功能和实现的过程,对学习和设计工程有很好的主导作用。下面看看本实验的程序流程图。

第二十二章 红外发送实验1556.png
图22.4.1.1 程序流程图

       22.4.2 程序解析
       本书籍的代码都在main.py脚本下编写的,读者可在光盘资料下找到对应的源码。红外发送实验main.py源码如下:
  1. from machine import Pin,SPI,I2C
  2. import atk_xl9555 as io_ex
  3. import atk_lcd as lcd
  4. from emission import NEC
  5. import remote
  6. import time


  7. """
  8. * @brief       程序入口
  9. * @param       无
  10. * @retval      无
  11. """
  12. if __name__ == "__main__":
  13.    
  14.     t = 0
  15.     # 初始化LED
  16.     led = Pin(1,Pin.OUT, value = 1)
  17.     # IIC初始化
  18.     i2c0 = I2C(0, scl = Pin(42), sda = Pin(41), freq = 400000)
  19.     # XL9555初始化
  20.     xl9555 = io_ex.init(i2c0)
  21.    
  22.     # 复位LCD
  23.     xl9555.write_bit(io_ex.SLCD_RST,0)
  24.     time.sleep_ms(100)
  25.     xl9555.write_bit(io_ex.SLCD_RST,1)
  26.     time.sleep_ms(100)
  27.     # 初始化SPI
  28.     spi = SPI(2,baudrate = 80000000, sck = Pin(12), mosi=Pin(11), miso=Pin(13))
  29.     # 初始化LCD,lcd = 0为正点原子2.4寸屏幕;lcd = 1为正点原子1.3寸SPILCD屏幕;
  30. display = lcd.init(spi,dc = Pin(40,Pin.OUT,Pin.PULL_UP,value = 1),
  31. cs = Pin(21,Pin.OUT,Pin.PULL_UP,value = 1),dir = 1,lcd = 0)
  32.     # 开启背光
  33.     xl9555.write_bit(io_ex.SLCD_PWR,1)
  34.     time.sleep_ms(100)
  35.     # 实验信息
  36.     display.string(30, 50, 240, 16, 16, "ESP32-S3",lcd.RED)
  37.     display.string(30, 70, 240, 16, 16, "REMOTE RX/TX TEST",lcd.RED)
  38.     display.string(30, 90, 240, 16, 16, "ATOM@ALIENTEK",lcd.RED)
  39.     display.string(30, 120, 200, 16, 16, "RX CMD:", lcd.RED)
  40.     display.string(30, 140, 200, 16, 16, "TX CMD:", lcd.RED)
  41.     display.string(30, 160, 200, 16, 16, "DECODE:", lcd.RED)
  42.     # 初始化红外接收
  43.     ir = remote.REMOTE_IR(2)
  44.     # 初始化红外发射
  45.     irb = NEC(Pin(8, Pin.OUT, value = 0), 38000)
  46.    
  47.     while True :

  48.         t += 1
  49.         
  50.         if t == 0:
  51.             t = 1
  52.         
  53.         irb.transmit(0,t)
  54.         cmd,s = ir.remote_scan()
  55.         time.sleep_ms(200)         # 延时100ms
  56.         display.fill(30 + 11 * 8 - 2,120,30 + 11 * 8 + 100,200,lcd.WHITE)
  57.         display.string(30 + 11 * 8, 120, 200, 16, 16, str(t - 1), lcd.BLUE)
  58.         display.string(30 + 11 * 8, 140, 200, 16, 16, str(cmd), lcd.BLUE)
  59.         display.string(30 + 11 * 8, 160, 200, 16, 16, str(s), lcd.BLUE)
  60.         led_state = led.value()
  61.         led.value(not led_state)
  62.         time.sleep_ms(1000)         # 延时1000ms
复制代码
       main函数代码比较简单,主要是通过irb.transmit 函数发送红外编码数据,然后利用ir.remote_scan函数获得红外遥控输入的数据(控制码),最后显示在LCD上面,且翻转LED状态。

       22.5 下载验证
       程序下载成功,我们就可以看到LCD上显示如下图所示内容:

第二十二章 红外发送实验3813.png
图22.5.1 程序运行结果

       我们可以看到我们开发板发送的红外信号全部红外接收头接收到,说明我们已经实现了红外接收头的自发自收功能。同时LED会闪烁,指示程序正在运行。温馨提示:由于开发板的红外接收头和红外发射头没有正对,有可能会造成接收不到数据情况,这样我们需要一个提供一个反射面,最简单的做法就是将手放在传感器正前方大约10cm左右的位置。

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-27 01:20

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表