之前做的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了
2014年5月16日 星期五
2014年5月11日 星期日
Bluetooth Low Energy X Sharp Memory LCD with Arduino
![]() |
| 線超級亂..... |
除了上次的Arduino+Sharp Memory LCD以外,另外加入BLE模組
不過這個模組不像仿間的那種只有TX-RX的,而是帶有待機模式的模組,我可以利用他的Pin喚醒Arduino,這樣我就可以在等待下一個資料前保持待機的狀態,而BLE也可以在極低功耗下維持連線.
Arduino端基本上是把UART收到的東西原封不動地丟到LCD上,好處就是我想改畫面的時候動主機端就好,但是缺點就是沒辦法搞圖出來像是天氣圖的符號,而受限於ASCII
最後是我寫了一個Python程式每五秒鐘讓它顯示PC的CPU使用率以及記憶體使用率
| 心血來潮加個LTC匯率試試 |
Python (主機端):
import serial
import time
import psutil
import json
import requests
s = serial.Serial('COM4', 115200)
while 1:
try:
r = requests.get('https://btc-e.com/api/2/ltc_usd/ticker')
c = json.loads(r.text)
except:
print("error")
pass
CPU = psutil.cpu_percent(interval=1)
print(CPU)
m = psutil.virtual_memory()
price = c['ticker']['buy']
String = "CPU :\n" + str(CPU)+"%" +"\nRam :\n"+str(m.percent) +"%\n"+"LTC:\n"+str("%.2f" % price)+"USD"
print(String)
s.write(String)
time.sleep(5)
s.close()
UPDATE:
我跑了一整晚之後,發現他竟然有殘影惹.....回頭去翻Datasheet,上面有說到這麼一段話:
Sharp recommends keeping maximum time between沒仔細看Datasheet哭哭喔
VCOM toggles to no more than one second, and
refreshing data every two hours, to prevent stuck pixels.
結果靠著黑白黑白這樣閃,總算是救回來了...(吧
趕快補上每秒reflash的code,希望不會再發生了
阿還有就是我需要把SS換個腳位,不然一直閃LED會耗電
UPDATE:測試耗電量
由於脈衝性的耗電量,理論上是要用示波器去看波形啦....
但是我沒有示波器可以用,所以只好拿Arduino佔當我的示波器,
首先測試Arduino的UART+ADC的速度,測試傳送一千次後,總共花了265ms
所以最快間隔就是0.265ms
再來就是讀資料的部分,我在BLE裝置上串了一個10歐姆的電阻,再用OPA放大11倍讀取電壓
,利用Python的程式把資料抓到.txt檔案裡,最後丟到excel分析
分析結果就是
- 接收一個Frame 平均電流 6.381mA 耗時85.065ms
- Reflesh畫面 平均電流 9.053mA 耗時1.855ms
- BLE一個連線週期 平均電流 6.772mA 耗時2.12ms
- 待機 平均電流0.0325mA
雖然時間上差不多(2.25ms)
總結的耗電量是0.487mA,但是感覺各種問題啊....
訂閱:
文章 (Atom)

