Raspberry Pi Pico筆記(15):HC05藍芽模組控制 LED 亮滅

本篇實作,要瞭解如何將藍芽模組 HC05 連接 Pi Pico,再透過手機連接 HC05 藍芽模組,透過手機的 APP 開啟和關閉 LED 連線,讓 LED 亮起/熄滅。

[材料]

  • Raspberry Pi Pico x1
  • HC05 無線藍芽模組 x1
  • LED x1
  • 電阻 220歐姆 x1
  • 麵包板 x1
  • 排線 n 條

[接線圖]

要設定HC-05,可以使用USB TO TTL模組,如 CP2102,也可以直接連接 Pi Pico,以下接線圖分別列出 HC-05 與 CP2102及 Pi Pico 的連接方式。

使用 Pi Pico 連接 HC05 藍芽模組。
Pi Pico接腳HC05其他
Pin 38(3.3V)VCC-
Pin 36(GND)GND-
Pin 1(GP0)RX-
Pin 2(GP1)TX-
Pin 7(GP5)- 接220歐姆電阻,電阻另一端再接 LED 正極


[CP2102設定HC05]

• 先確定插上 CP2102 時,電腦是否能取得連接埠?可以找到電腦的 [控制台] →[硬體和音效]→[裝置管理員]→[連接埠],檢查一下是否有出現 COM 的號碼?

安裝好 CP2102後,要使用AT指令可以執行 Realterm 終端機,程式可以到 這裡 下載。下載後執行畫面如下:

設定時有幾個地方要注意:
  • 按下 [Display] 頁籤,使用 Ansi 方式呈現,就不會像使用 ASCII 每行最後有換行符號
  • 按下 [Port] 頁籤,速率選定 HC-05 預設的 38400 Buads,Port 選擇跟裝置管理員使用的COM 埠號,如果選擇的速度不對,會無法回應,修改完成後,按下 [Change]儲存。
  • 按下 [Send] 頁籤,EOL處按下+CR及+LF,此時可以在其左邊的地方輸入AT指令(如上圖)。

[手機藍芽連線與APP]

由於我的 iPhone 無法找到 HC05 的藍芽裝置,於是找了一部舊的 Android 手機,使用 Arduino 藍芽控制的 APP,來與 HC05 藍芽連線。可到 Google Play下載「Arduino bluetooth controller」使用,或到 Google Play下載類似的應用程式。執行 APP 後,選擇連線的裝置,再選擇「Switch Mode」開關按鈕。

按下右上方的「設定」,在綠色按鈕設定輸出為「y」,在紅色按鈕設定輸出為「n」,就可以按下圖示的按鈕當作 LED 的開關。


[程式一]

程式中的 uos 模組,可以顯示目前開發板的狀況:
import uos
print(uos.uname()) 
得到以下的結果:
(sysname='rp2', nodename='rp2', release='1.15.0', version='v1.15 on 2021-04-18 (GNU 10.2.0 MinSizeRel)', machine='Raspberry Pi Pico with RP2040')
在開始前,可先用以下這段程式檢查連線狀況,如果有回應表示連線正常。
import uos
import machine
import utime

print(uos.uname())      #列出開發板的資訊
uart0 = machine.UART(0,baudrate=38400)  

def sendCMD_waitResp(cmd, uart=uart0, timeout=2000):
    print("CMD: " + cmd)
    uart.write(cmd)
    waitResp(uart, timeout)
    print()
    
def waitResp(uart=uart0, timeout=2000):
    prvMills = utime.ticks_ms()
    resp = b""
    while (utime.ticks_ms()-prvMills)<timeout:
        if uart.any():
            resp = b"".join([resp, uart.read(1)])
    print(resp)

print(uart0)
print("- uart0 -")

waitResp()
sendCMD_waitResp("AT+VERSION\r\n")  #顯示藍芽版本
sendCMD_waitResp("AT+UART?\r\n")    #顯示設定速率
sendCMD_waitResp("AT+ROLE?\r\n")    #顯示角色,0為Slave,1為Master
sendCMD_waitResp("AT+CMODE?\r\n")   #查詢目前工作模式
sendCMD_waitResp("AT+ADDR?\r\n")    #顯示藍芽位址
print("Done")

[程式二]

這段程式判斷接收的字元,「y」則讓 LED 亮起,「n」讓 LED 熄滅。
import uos
import machine
import utime

led = machine.Pin(5, machine.Pin.OUT)

print(uos.uname())
uart = machine.UART(0, baudrate=38400)  #以 38400 bits/sec 進行通序
print(uart)


def waitResp(uart=uart, timeout=500):
    prvMills = utime.ticks_ms()
    resp=b""
    while(utime.ticks_ms()-prvMills)<timeout:
        if uart.any():
            resp = b"".join([resp, uart.read(1)])
    return(resp)

while True:
    sg = waitResp()      #等待傳輸字串
    print(len(sg.decode()),sg.decode())   #列出輸入的字元長度
    if(sg.startswith("y")):    #檢查字串的第一個字元
       led(1)
    elif(sg.startswith("n")):
       led(0)
    
    utime.sleep(0.5)

[結果]

程式一執行的結果如下:

程式二的執行結果如下:

[參考資料]

  • http://helloraspberrypi.blogspot.com/2021/02/raspberry-pi-picomicropython-pair-hc-05.html
  • https://blog.naver.com/cosmosjs/222245240386

Post a Comment

較新的 較舊