2014年5月16日 星期五

Bluetooth Low Energy on Raspberry Pi using Python

之前做的Arduino BLE X Sharp Memory LCD的Display原先溝通是靠主模組去做BLE的連接,我再用一個UART連上主模組丟資料給他
做完是做完了,但是手上唯一一個UART轉USB模組我還需要用阿...總不能一直接在上面,同時無線氣象站Ver 3.0已經把Raspberry pi上面唯一一個UART佔用掉了.
想起來以前曾經買過Blutooth 4.0的USB接收器,剛好發現它可以接收BLE的資料(不是每個4.0都可以收BLE的),所以決定想辦法靠這個把RPI和BLE接起來

於是本文開始~
基本上用的程式語言是Python,用的是http://www.elinux.org/RPi_Bluetooth_LE,BLEPY的library
我需要模組的UART TX的功能
從Datasheet上面可以看到
UART TX的Service UUID為:0000ffe5-0000-1000-8000-00805f9b34fb
 Characteristic UUID為:0000ffe9-0000-1000-8000-00805f9b34fb
基本上設定流程如下:
先用sudo hcitool lescan找BLE裝置

在來就是程式中
p = Peripheral("C4:ED:BA:63:63:53")
先連接上BLE裝置
SERVER = UUID("%08X-0000-1000-8000-00805f9b34fb" % (0x0000ffe5))
CAR = UUID("%08X-0000-1000-8000-00805f9b34fb" % (0x0000ffe9))
再來預先把UUID準備好

p.getServices()
把Service清單拿到
service = p.getServiceByUUID(SERVER)
用UUID開Service
p.getCharacteristics()
拿 Characteristic的清單
ctrl = service.getCharacteristics(CAR) [0]
用UUID開Characteristic

最後用ctrl.write(data)送出資料

顆顆顆,我的模組一次送20byte,更新一個畫面大概40個byte剛剛好

然後有點悲劇的是我已經去露天買了UART轉USB了....
往好處想,我原本的UART轉USB沒有3.3V輸出可以用,這樣可以一個5V一個3.3V了

1 則留言:

  1. 請問你在這邊做的write是寫到LCD上去顯示嗎?
    想問一下有沒有方法一個pi3 write data然後另一個pi3接收這樣

    回覆刪除