背景知識:
? ? 該藍牙繼電器是利用SPP藍牙串行端口服務來建立藍牙串口數(shù)據(jù)傳輸。電腦端指令通過藍牙發(fā)送到8路繼電器電路板上,該電路板的藍牙模塊會將收到的指令再通過串口給板子上的MCU。MCU根據(jù)收到的指令來控制8路繼電器的通斷。
電路介紹:
該8路繼電器的功能特點:
1.板載8位高性能微控制器芯片和SPP-C藍牙2.1從機模塊
2.提供藍牙繼電器控制APP
3.控制距離:10M(空曠環(huán)境)
4.工作電壓:DC7-28V/5V
5.板載8路5V,10A/250V AC 10A/30V DC繼電器,可連續(xù)吸合10萬次,具有二極管瀉流保護,響應時間短
6. 板載藍牙狀態(tài)指示燈和繼電器指示燈
7.預留UART調(diào)試接口和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(藍燈):藍牙狀態(tài)指示燈,描述如下:
? ? ? (1)慢閃時代表等待和手機建立連接;
? ? ? (2)常亮時代表成功和手機建立連接。
6. 預留的2個跳線帽:正常使用時默認都插到右端(即RX連RX1,TX連TX1),若想單獨使用USB轉(zhuǎn)TTL串口模塊調(diào)試SPP-C模組,請都插到左端(不然可能會有干擾)。
7. 繼電器COM1-8:公共端;
8. 繼電器NC1-8:常閉端,繼電器吸合前與COM1短接,吸合后懸空;
9. 繼電器NO1-8:常開端,繼電器吸合前懸空,吸合后與COM1短接。
環(huán)境準備:
1.? ? win10電腦(帶藍牙功能)
2.? ? python3.X
3.? ? 8路繼電器電路板
硬件連線:
給8路繼電器電路板的5V和GND端子連接5V電源供電, 7~28V的端子不要接。
每個繼電器的三個端子,COM*和NO*口作用相當于一個開關(guān),將加熱模塊的導線接入即可控制其通斷。
COM1:公共端;
NC1:常閉端,繼電器吸合前與COM1短接,吸合后懸空;
NO1:常開端,繼電器吸合前懸空,吸合后與COM1短接。
電腦連接:
1.確保電腦帶有藍牙設(shè)備
2.給8路繼電器電路板供電,此時藍牙的藍色指示燈閃爍,代表藍牙尚未連接。
3.配對藍牙:
windows右下角通知欄 -> 藍牙 -> 右鍵"轉(zhuǎn)到設(shè)置" -> 添加藍牙設(shè)備”JDY-31-SPP”。藍牙的配對PIN碼為“1234”。配對好之后可以在“其他設(shè)備”里看到我們的藍牙
4.? 在“藍牙與其他設(shè)備”窗口,點擊“更多藍牙選項”,查看藍牙串口的端口號。如圖所示,此時該藍牙的發(fā)送端口為”COM6”。在設(shè)備管理器里也可以查看這兩個端口。
5.? 此時操作該COM口就可以控制藍牙的連接與發(fā)送功能。
程序使用:
先安裝:? ?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)
```