2017年6月28日 星期三

MQTT+BLE Scan+Setting WiFi Via BLE = Linkit 7697 三個願望一次滿足

此篇文章嘗試將燈座原本的ESP8266+CC2540改為Linkit 7697

由於先前在CC2540曾設定過小於4秒掃瞄一次
專案會出現奇怪的問題,所以設定掃瞄時間都不會小於4

Linkit 7696可以設定到1秒掃瞄一次! 呀呼~ 豈不痛快!

用在室內定位數據愈多就會愈準確!
數據流的概念,劫盜地圖就要完成了啊!

在這裡說明一下這個專案的定內定位跟一般Beacon有點不同

Beacon通常是貼在某個位置發射訊號,讓Smart phone接收
APP在本地端用演算法顯示位置
流程是這樣:Beacon-->Smart phone-->Show Location

但這個專案是想知道對方的位置,所以是燈座接收”BLE訊號
傳到Web ServerAPPWeb Server撈資料,再由APP本地端演算法顯示位置
流程是這樣:BLE Devices-->Cloud Server-->Smart phone-->Show Location

雖然Linkit 7697價格還是比ESP8266+CC2540貴了一些
但是對Maker來說,使用Arduino IDE來操作就可以了! 方便!

比較頭痛的是在設定家中AP的方式

ESP8266及Ameba在Arduino IDE都有指令可用

ESP8266使用Socket傳字串,流程如下
ESP8266 AP mode-->收到手機傳來的Socket(字串)->轉為Station mode->設定帳號密碼

ESP8266 AP mode有一個指令可以設定ESP8266叫什麼名字
好讓手機可以連上ESP8266 AP,用法如下
WiFi.softAP("AP名稱", "AP密碼")

而早先開發過Realtek Ameba,AP mode是使用ATPA,用法如下

ATPA="想給Ameba的名字","Ameba AP的密碼","Channel"

但在Linkit 7697 Arduino IDE沒有這種指令

看來是不支援在Arduino IDE 做APStation mode

But But But… MTK的文件,在SDK開發包可支援耶~

這個專案為了開放程式碼及Maker大大
硬是要用Arduino IDE做開發,只好修改流程如下
MT7697 BLE Characteristic收手機傳來的訊息-->轉到WiFi設定AP帳號密碼

雖然可以用手機讓MT7697連上網,正所謂殊途同歸

感謝MTK大大,提供這一支Wi-Fi Connection via BLE程式

但是在BLE傳封包一次只能20Byte…

稍做一點點解釋
如果在使用APPSocketESP8266時,一開始會設定燈座是何許人也
姓名(這燈座叫啥名)、地址(GPS經緯度)與電話(mail)
然後再送到戶政事務所(Cloud Server)登記,封包格式如下

/AP帳號/AP密碼/燈座位置(Bed or bathraoom…)/GPS經度/GPS緯度/TBD/使用者名稱/

這樣隨便傳都超過20Byte
但有些人家中的帳號會超過10Byte!!!

例如某家的AP如下
名稱是I am Takeshi Kaneshiro
密碼是I am a super handsome men

這該如何是好?

可以預知Linkit 7697搭配Arduino IDE開發APP有點小麻煩與小坑,但好坑不跳嗎?!

附上GithubSource Code供參考

此源碼包括了
1.      手機使用BLE傳輸AP的帳密
2.      MQTT
3.      BLE Scan
4.      Indoor location 1公尺的計算方式
(將來校正要在手機APPBLECharacteristic交互)

註:MTK大大可不可以開放ArduinoAPStation mode? 鳴鳴...  


            
終於要進入修改APP的階段啦Good Luck!!!


加入我們吧!

1 則留言:

  1. 版主您好,關於您本篇有「但Linkit 7696可以設定到1秒掃瞄一次! 呀呼~ 豈不痛快!」,請問是如何完成,我們目前用scan然後delay一秒後stopscan,但是發現總是漏掉很多beacon沒掃到

    回覆刪除

FB設定搶先看的方式

設定搶先看的兩種方式 A1. 先到我家的日常粉絲團按下 …( 紅框處 ) A2. 按下追蹤中 ( 紅框處 ) A3. 按下搶先看 ( 紅框處 ) A4. 完成!!! 另一種方式 ...