RS-485仅是一个电气标准,描述了接口的物理层,像协议、时序、串行或并行数据以及链路全部由设计者或更高层协议定义。
RS-485定义的是使用平衡(也称作差分)多点传输线的驱动器(driver)和接收器(receiver)的电气特性。
ESP32
单片机TTL转RS485模块

接线说明
| 开发板 | TTL转RS485模块 |
|---|---|
| 22 | TXD |
| 23 | RXD |
| 5v | VCC |
| GND | GND |
485温湿压、噪声4合1传感器
温湿压、噪声

| 参数 | 测量范围 | 分辨率 | 精度 |
|---|---|---|---|
| 温度 | -40—80℃ | 0.1℃ | ±0.3℃ |
| 湿度 | 0-100%RH | 0.1%RH | ±3.0 RH |
| 气压 | 30—110kPa | 0.01Kpa | ±0.02Kpa |
| 噪声 | 30—120dB | 0.1dB | ±1.5dB |
接线说明
| TTL转RS485模块 | 4合1传感器 | 开发板 |
|---|---|---|
| A+ | TXD_A 黄线 | |
| B- | RXD_B 绿线 | |
| 红-12V外接电源 | ||
| 蓝-GND 外接电源 |
PS:基本485的接线都一样了
这个传感器的地址是一样的哈,默认102(0x66)

| 寄存器地址(十六进制) | 参数名称 | 备注 |
|---|---|---|
| 0x00 | 温度 | 读取数值/100 |
| 0x01 | 湿度 | 读取数值/100 |
| 0x02 | 大气压 | Uint16 读取数值/100 |
| 0x03 | 噪声 | 读取数值/10 |
| 0x04 | 地址 | 地址范围:0X01-0XFF默认地址0x66(102) |
| 0x05 | 波特率 | 0x01:4800 - 0x02:9600- 0x03:56000-0x04:115200 |
地址相同我们改寄存器地址。比如我们来测一下噪音试试,修改寄存器低位就行
from machine import UART
import time
uart= UART(2, baudrate=9600, bits=8, parity=None, rx=22,tx=23, stop=1, timeout=100)
barray = bytearray([0x66,0x03,0x00,0x03,0x00, 0x01 ,0x7c ,0x1d]) #问询帧
while True:
uart.write(barray)
time.sleep(1)
#print(uart.read())
if(uart.any()):
u2by=uart.read() # 返回的是答应帧的内容
aa=u2by
print(aa)
zaoyin10 = int.from_bytes(aa[3:5],'big') # 风速
zaoyin=zaoyin10/10 #实际值得10倍,要除以10
print(zaoyin,"dB")
串口输出噪音,那么OK了 把值全读出来吧

from machine import UART
import time
uart= UART(2, baudrate=9600, bits=8, parity=None, rx=22,tx=23, stop=1, timeout=100)
barray0 = bytearray([0x66,0x03,0x00,0x00,0x00, 0x01 ,0x8c ,0x1d]) #温度
barray1 = bytearray([0x66,0x03,0x00,0x01,0x00, 0x01 ,0xdd ,0xdd]) #湿度
barray2 = bytearray([0x66,0x03,0x00,0x02,0x00, 0x01 ,0x2d ,0xdd]) #气压
barray3 = bytearray([0x66,0x03,0x00,0x03,0x00, 0x01 ,0x7c ,0x1d]) #噪音
dict={} # 建立一个空字典
dict["tem"]=barray0
dict["hum"]=barray1
dict["bpre"]=barray2
dict["noise"]=barray3
while True:
for key in dict: # 遍历这个字典
uart.write(dict[key])
time.sleep(5)
#print(uart.read())
if(uart.any()):
u2by=uart.read() # 返回的是答应帧的内容
aa=u2by
##print(aa)
fio = int.from_bytes(aa[3:5],'big') # 4和1传感器度数
#print(key)
if key == "tem":
tem=fio/100
print("当前%s : %s 度"%(key,tem))
if key == "hum":
hum=fio/100
print("当前%s is: 百分之%s "%(key,hum))
if key == "bpre":
bpre=fio/100
print("当前%s is: %s 帕斯卡"%(key,bpre))
if key == "noise":
noise=fio/10
print("当前%s is: %s 分贝"%(key,noise))
# 为了测试方便看,中英文混搭,自己写尤其是用到项目上不要这样写,尽量用英文
效果如下:还是很舒服的。。
