“红外接收”的版本间的差异

来自Labplus盛思维基百科
跳转至: 导航搜索
(创建页面,内容为“ == 概述 == UART通讯,接收红外遥控信号,能解析NEC协议数据。有效距离8米,波特率115200bps == 技术参数 == * 工作电压:3.3V or 5…”)
 
使用教程
 
(未显示2个用户的18个中间版本)
第1行: 第1行:
 
+
[[文件:黑色传感器最终版12.20-35.png|350px|缩略图|右]]
 
== 概述 ==
 
== 概述 ==
UART通讯,接收红外遥控信号,能解析NEC协议数据。有效距离8米,波特率115200bps
+
接收红外遥控信号,能解析NEC协议数据并UART输出数据。有效距离8米,波特率115200bps。
  
 
== 技术参数 ==
 
== 技术参数 ==
* 工作电压:3.3V or 5V
+
* 工作电压:VCC 3.3-5V
* I2C数字信号输出
+
* 通讯方式:UART
* 温度测量范围:-40~125℃
+
* 输出字节长度:1字节
* 温度测量精度:±0.3℃
+
* 有效距离:8米
* 湿度测量范围:0~100%RH
 
* 湿度测量精度:±3%RH
 
 
* 模块尺寸:24x46x7.5mm
 
* 模块尺寸:24x46x7.5mm
  
第17行: 第15行:
 
| <small>VCC</small> || <small>电源</small>
 
| <small>VCC</small> || <small>电源</small>
 
|-
 
|-
| <small>SDA</small> || <small>I2C数据</small>
+
| <small>RXD</small> || <small>串口接收</small>
 
|-
 
|-
| <small>SCL</small> || <small>I2C时钟</small>
+
| <small>TXD</small> || <small>串口发送</small>
 
|-
 
|-
 
| <small>GND</small> || <small>地</small>
 
| <small>GND</small> || <small>地</small>
第25行: 第23行:
  
 
== 使用教程 ==
 
== 使用教程 ==
=== <small>连接示意图</small> ===
+
1.串口波特率设置115200bps。程序在定义串口引脚时,注意模块端的RX、TX需要和主板上的RX、TX交叉!<br/>
=== <small>Arduino示例</small> ===
+
2.当接收到红外调制信号,模块上的指示灯会闪烁。<br/><br/>
=== <small>MicroPython示例</small> ===
+
 
 +
''下表为附件遥控器的按键对应值表''
 +
<br />
 +
{|style="background-color:#FCF8E3;color:#8A6D3B;"
 +
|-
 +
|width="25%" rowspan="19"|[[File:遥控器.png|100px]] ||遥控按键 || HEX(16进制)||DEC(10进制)
 +
|-valign="center" align="center"
 +
|-valign="center" align="center"
 +
|"1"|| 0x00 ||00
 +
|-valign="center" align="center"
 +
|"2"|| 0x80 ||128
 +
|-valign="center" align="center"
 +
|"3"|| 0x40 ||64
 +
|-valign="center" align="center"
 +
|"4"|| 0x20 ||32
 +
|-valign="center" align="center"
 +
|"5"|| 0xA0 ||160
 +
|-valign="center" align="center"
 +
|"6"|| 0x60||96
 +
|-valign="center" align="center"
 +
|"7"|| 0x10||16
 +
|-valign="center" align="center"
 +
|"8"|| 0x90||144
 +
|-valign="center" align="center"
 +
|"9"|| 0x50||80
 +
|-valign="center" align="center"
 +
|"0"|| 0xB0||176
 +
|-valign="center" align="center"
 +
|"*"|| 0x30||48
 +
|-valign="center" align="center"
 +
|"#"|| 0x70||112
 +
|-valign="center" align="center"
 +
|"↑"|| 0x88||136
 +
|-valign="center" align="center"
 +
|"↓"|| 0x98||152
 +
|-valign="center" align="center"
 +
|"←"|| 0x28||40
 +
|-valign="center" align="center"
 +
|"→"|| 0x68||104
 +
|-valign="center" align="center"
 +
|"Ok"|| 0xA8||168
 +
|}
 +
 
 +
 
 +
=== <font size="3">掌控板</font> ===
 +
{|
 +
|-
 +
| [[文件:红外接收2.png |900px|居中|无框]]
 +
|}
 +
 
 +
 
 +
===<font size="3"> Python示例 </font>===
 +
{|  border="0" cellpadding="2" width="60%"
 +
|-
 +
| width="20%"|
 +
|[[文件:红外接收 连接图.png|600px|无框]]
 +
|-
 +
|
 +
| style="text-align:center;" |红外接收模块接收,数码管模块显示数据
 +
|}
 +
 
 
<pre style="color:blue">
 
<pre style="color:blue">
 
from microbit import *
 
from microbit import *
  
def getTemp():
+
_TubeTab = [
   i2c.write(0x40,bytearray([0xE3]))
+
    0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F,
   sleep(85)
+
    0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71, 0x00, 0x40]
   t=i2c.read(0x40,2)
+
 
   return -46.86+175.72*(t[0]*256+t[1])/65535
+
def tm1650Init():
 
+
   i2c.write(0x24, bytearray([0x01]))
    
+
def tm1650DisplayUint(x):
def getHumi():
+
  charTemp = [0, 0, 0, 0]
  i2c.write(0x40,bytearray([0xE5]))
+
   x = (x if x < 10000 else 9999)
   sleep(40)
+
   charTemp[3] = x%10
   t=i2c.read(0x40,2)
+
  charTemp[2] = (x//10)%10
  return -6+125*(t[0]*256+t[1])/65536
+
   charTemp[1] = (x//100)%10
 
+
  charTemp[0] = (x//1000)%10
 +
  if x < 1000:
 +
    charTemp[0] = 0x10
 +
    if x < 100:
 +
      charTemp[1] = 0x10
 +
      if x < 10:
 +
        charTemp[2] = 0x10
 +
   for i in range(0, 4):
 +
    i2c.write(0x34+i, bytearray([_TubeTab[charTemp[i]]]))
 +
def tm1650DisplayInt(x):
 +
  x = round(x)
 +
   if x >= 0:
 +
    tm1650DisplayUint(x)
 +
   else:
 +
    temp = (x if x > -999 else -999)
 +
    temp = abs(temp)
 +
    tm1650DisplayUint(temp)
 +
    if temp < 10:
 +
      i2c.write(0x36, bytearray([_TubeTab[0x11]]))
 +
    elif temp < 100:
 +
      i2c.write(0x35, bytearray([_TubeTab[0x11]]))
 +
    elif temp < 1000:
 +
      i2c.write(0x34, bytearray([_TubeTab[0x11]]))
 +
 
 +
display.off()
 +
tm1650Init()
 +
uart.init(baudrate=115200, bits=8, parity=None, stop=1, tx=pin1, rx=pin0)
 
while True:
 
while True:
     print('TEMP:',getTemp())  #获取温度并打印出来
+
     if uart.any():
    print('HUMi:',getHumi())  #获取湿度并打印出来
+
        _word=uart.read()
    sleep(500)
+
       
 +
        tm1650DisplayInt(_word[0])
 +
 
 +
 
 
</pre>
 
</pre>
  
=== <small>图形化示例</small> ===
+
=== <font size="3">图形化示例 </font> ===
 +
连接图同上
 +
{|
 +
|-
 +
| [[文件:红外接收 3.png|1000px|无框|左]]
 +
|}
 +
 
 +
== 版本历史记录 ==
 +
 
 +
{|  border="1" cellspacing="0" align="left" cellpadding="0" width="60%" style="text-align:center;"
 +
|- style="text-align:center;background-color:#6fa8dc;color:#fffff;"
 +
!width="10%"|Version !!width="15%"| Date !! Note  <small>[+]新增[-]删除[^]修复</small>
 +
|-
 +
| V2.0 || || style="text-align:left"|
 +
|}

2020年6月30日 (二) 17:00的最新版本

黑色传感器最终版12.20-35.png

概述

接收红外遥控信号,能解析NEC协议数据并UART输出数据。有效距离8米,波特率115200bps。

技术参数

  • 工作电压:VCC 3.3-5V
  • 通讯方式:UART
  • 输出字节长度:1字节
  • 有效距离:8米
  • 模块尺寸:24x46x7.5mm

引脚定义

VCC 电源
RXD 串口接收
TXD 串口发送
GND

使用教程

1.串口波特率设置115200bps。程序在定义串口引脚时,注意模块端的RX、TX需要和主板上的RX、TX交叉!
2.当接收到红外调制信号,模块上的指示灯会闪烁。

下表为附件遥控器的按键对应值表

遥控器.png 遥控按键 HEX(16进制) DEC(10进制)
"1" 0x00 00
"2" 0x80 128
"3" 0x40 64
"4" 0x20 32
"5" 0xA0 160
"6" 0x60 96
"7" 0x10 16
"8" 0x90 144
"9" 0x50 80
"0" 0xB0 176
"*" 0x30 48
"#" 0x70 112
"↑" 0x88 136
"↓" 0x98 152
"←" 0x28 40
"→" 0x68 104
"Ok" 0xA8 168


掌控板

红外接收2.png


Python示例

红外接收 连接图.png
红外接收模块接收,数码管模块显示数据
from microbit import *

_TubeTab = [
    0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 
    0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71, 0x00, 0x40]

def tm1650Init():
  i2c.write(0x24, bytearray([0x01]))
def tm1650DisplayUint(x):
  charTemp = [0, 0, 0, 0]
  x = (x if x < 10000 else 9999)
  charTemp[3] = x%10
  charTemp[2] = (x//10)%10
  charTemp[1] = (x//100)%10
  charTemp[0] = (x//1000)%10
  if x < 1000:
    charTemp[0] = 0x10
    if x < 100:
      charTemp[1] = 0x10
      if x < 10:
        charTemp[2] = 0x10
  for i in range(0, 4):
    i2c.write(0x34+i, bytearray([_TubeTab[charTemp[i]]]))
def tm1650DisplayInt(x):
  x = round(x)
  if x >= 0:
    tm1650DisplayUint(x)
  else:
    temp = (x if x > -999 else -999)
    temp = abs(temp)
    tm1650DisplayUint(temp)
    if temp < 10:
      i2c.write(0x36, bytearray([_TubeTab[0x11]]))
    elif temp < 100:
      i2c.write(0x35, bytearray([_TubeTab[0x11]]))
    elif temp < 1000:
      i2c.write(0x34, bytearray([_TubeTab[0x11]]))

display.off()
tm1650Init()
uart.init(baudrate=115200, bits=8, parity=None, stop=1, tx=pin1, rx=pin0)
while True:
    if uart.any():
        _word=uart.read()
        
        tm1650DisplayInt(_word[0])
   

图形化示例

连接图同上

红外接收 3.png

版本历史记录

Version Date Note [+]新增[-]删除[^]修复
V2.0