背景知识:
该蓝牙继电器是利用SPP蓝牙串行端口服务来建立蓝牙串口数据传输。电脑端指令通过蓝牙发送到8路继电器电路板上,该电路板的蓝牙模块会将收到的指令再通过串口给板子上的MCU。MCU根据收到的指令来控制8路继电器的通断。
电路介绍:
该8路继电器的功能特点:
1.板载8位高性能微控制器芯片和SPP-C蓝牙2.1从机模块
2.提供蓝牙继电器控制APP
3.控制距离:10M(空旷环境)
4.工作电压:DC7-28V/5V
5.板载8路5V,10A/250V AC 10A/30V DC继电器,可连续吸合10万次,具有二极管泻流保护,响应时间短
6. 板载蓝牙状态指示灯和继电器指示灯
7.预留UART调试接口和MCU程序下载口
该8路继电器的硬件介绍:
1. 7-28V、GND、5V:7-28V/5V电源输入;
2. TX、RX:UART串口引脚;
3. 5V、GND、SWIM、NRST:单片机程序下载口。
4. LED D1/D7/D12/D17/D2/D8/D13/D18(红灯):继电器工作指示灯,打开时点亮
5. LED D16(蓝灯):蓝牙状态指示灯,描述如下:
(1)慢闪时代表等待和手机建立连接;
(2)常亮时代表成功和手机建立连接。
6. 预留的2个跳线帽:正常使用时默认都插到右端(即RX连RX1,TX连TX1),若想单独使用USB转TTL串口模块调试SPP-C模组,请都插到左端(不然可能会有干扰)。
7. 继电器COM1-8:公共端;
8. 继电器NC1-8:常闭端,继电器吸合前与COM1短接,吸合后悬空;
9. 继电器NO1-8:常开端,继电器吸合前悬空,吸合后与COM1短接。
环境准备:
1. win10电脑(带蓝牙功能)
2. python3.X
3. 8路继电器电路板
硬件连线:
给8路继电器电路板的5V和GND端子连接5V电源供电, 7~28V的端子不要接。
每个继电器的三个端子,COM*和NO*口作用相当于一个开关,将加热模块的导线接入即可控制其通断。
COM1:公共端;
NC1:常闭端,继电器吸合前与COM1短接,吸合后悬空;
NO1:常开端,继电器吸合前悬空,吸合后与COM1短接。
电脑连接:
1.确保电脑带有蓝牙设备
2.给8路继电器电路板供电,此时蓝牙的蓝色指示灯闪烁,代表蓝牙尚未连接。
3.配对蓝牙:
windows右下角通知栏 -> 蓝牙 -> 右键"转到设置" -> 添加蓝牙设备”JDY-31-SPP”。蓝牙的配对PIN码为“1234”。配对好之后可以在“其他设备”里看到我们的蓝牙
4. 在“蓝牙与其他设备”窗口,点击“更多蓝牙选项”,查看蓝牙串口的端口号。如图所示,此时该蓝牙的发送端口为”COM6”。在设备管理器里也可以查看这两个端口。
5. 此时操作该COM口就可以控制蓝牙的连接与发送功能。
程序使用:
先安装: pyserial
pip install pyserial
详见: pySerial — pySerial 3.0 documentation (pythonhosted.org)
```
from astimport Bytes
import serial
import string
import binascii
import time
class MyBleRelay:
"""My bluetooth wireless 8-port relay"""
def __init__(self, serPort, baud =9600):
self.ser = serial.Serial(serPort, baud, timeout=0)
self.name =self.ser.name
def open(self):
self.ser.open()
def close(self):
self.ser.close()
def is_open(self):
return self.ser.is_open
def trun_on(self, idx):
HEX_str =0
if idx ==1:
HEX_str =bytes.fromhex("A0 01 01 A2")
elif idx ==2:
HEX_str =bytes.fromhex("A0 02 01 A3")
elif idx ==3:
HEX_str =bytes.fromhex("A0 03 01 A4")
elif idx ==4:
HEX_str =bytes.fromhex("A0 04 01 A5")
elif idx ==5:
HEX_str =bytes.fromhex("A0 05 01 A6")
elif idx ==6:
HEX_str =bytes.fromhex("A0 06 01 A7")
elif idx ==7:
HEX_str =bytes.fromhex("A0 07 01 A8")
elif idx ==8:
HEX_str =bytes.fromhex("A0 08 01 A9")
else:
HEX_str =0
self.ser.write(HEX_str)
def trun_off(self, idx):
HEX_str =0
if idx ==1:
HEX_str =bytes.fromhex("A0 01 00 A1")
elif idx ==2:
HEX_str =bytes.fromhex("A0 02 00 A2")
elif idx ==3:
HEX_str =bytes.fromhex("A0 03 00 A3")
elif idx ==4:
HEX_str =bytes.fromhex("A0 04 00 A4")
elif idx ==5:
HEX_str =bytes.fromhex("A0 05 00 A5")
elif idx ==6:
HEX_str =bytes.fromhex("A0 06 00 A6")
elif idx ==7:
HEX_str =bytes.fromhex("A0 07 00 A7")
elif idx ==8:
HEX_str =bytes.fromhex("A0 08 00 A8")
else:
HEX_str =0
self.ser.write(HEX_str)
```