LASS - LinkIt Smart 7688Duo - 初始帶起
緣起
- 好用,強悍,能有更多的應用,價格低,對未來更多的佈建有幫助
規格
- LASS 選用 LinkIt Smart 7688 Duo
步驟
- 系統設計
- Arduino 讀取 ADC sensor 確認
- python 讀取 sensor 值確認
- 上傳 MQTT
資料收集
哈爸陪你問 - 如何成為 open hardware maker (LinkIt Smart 7688篇) - Q&A
SDK SDK-Web
PinOut
HDK HDK-Web
Datasheet
Duo get start
LASS 移植 LinkIt 7688 Duo 初步規劃與研究
OpenWRT
Video Streaming
- [ Linkit smart 7688 ] 7688 影像串流功能
pyfirmata
- firmata main firmata download firmata 2.1 Firmata Protocol Documentation
- Going Beyond StandardFirmata - Adding New Device Support
目前狀態
- V0.0.2
- 經由簡單的修改能達到以下功能
- 支援所有的 Digital read/write. Analog read
- 感測值可以包成 LASS 標準格式
- 將感測值發給 MQTT server
- 同時可以 subscribe MQTT
- => 簡單說就是最弱的 LASS 設備
- V0.0.3
- 提供一個支援特別 sensor 的示意寫法。hack 一個 analog port 來給自己用
- py 用 pyfirmata.ArduinoDue 支援
系統規格
- LASS 相關規格確認
- Features
- Support MQTT protocol to send sensors data
- Wifi support auto-reconnect
- Support offline sensor storage to flash, auto upload sensors data when online
- Architecture support sensors customization
- The MQTT topic/msg coding must support LASS data specification
- LASS - Data specification
- LASS 資料格式
- MQTT server: gpssensor.ddns.net
- Additional features
- ? Support Blynk mobile GUI interface
- Support alarm mode
- Video streaming
- System setting through web server
- support GPS ( gps sensor or other way)
系統架構
- 主單元 - OpenWRT - MPU
- Wifi handle
- MQTT handler
- Setting
- Offline sensor storage
- 感測控制單元 - Arduino - MCU
- active sensor to sensing
- control actuauor
- mpu_setup()
- load_setting()
- init_mpu_ctrl_thread()
-
- mpu_loop()
-
- if( data_in_disk )
- send_all_by_mqtt()
- delete data_in_disk
-
- if(need_proc_result_queue)
- if(!wifi_ready)
- save_to_disk
- else
- send_mqtt()
-
- }
- mpu_ctrl_thread()
- if(need_send_cmd)
- send_readall_cmd_to_mcu()
-
- process_recv_from_mcu()
- pack_all_sensors_info()
- response_ctrl_if_needed()
- append_to_result_queue()
- sleep()
- mcu_setup(){
- serial_setup();
- library_setup();
- attach(’a’, callbackFunction read_all_sensors);
- }
- mcu_loop(){
- firmata_loop();
- extra_sensor_service();
- }
- read_all_sensors(){
- sendString(’a’, byte bytec, "packed_sensor_info")
- }
- extra_sensor_service(){
- service();
- if(need_notice_mpu)
- sendString() or send...
- }
- github 目錄規劃
- mt7688duo_install.sh : 安裝腳本,只需執行一次
- mt7688duo.py : MPU LASS 主程式
- mt7688duo.ino : MCU LASS 主程式
版本命名規則
- 因為兩個主程式 ( mt7688duo.py/mt7688duo.ino)都需要協同運作
- 我們需要一個方式能確認彼此的相容性,基本的原則就是相同的版本會相容,如果找不到相容的版本,找比他小最接近的那個版本。
- 目前命名規則為
- 當兩個程式一起被更新的時候,兩個程式必須為同版本
- mt7688duo.py:Setting.ver_app="0.0.3"
- mt7688duo.ino:VER_APP "0.0.3"
- 當單獨被更新時,但版號小於對方時,請使用跟對方相同的版本
- 比方說原本 mt7688duo.py:0.0.8, mt7688duo.ino: 0.0.5, 此時更新 mt7688duo.ino 需要設定成 0.0.8
- 當單獨被更新時,但版號大於等於對方時,請持續累加
- 比方說原本 mt7688duo.py:0.0.8, mt7688duo.ino: 0.0.5, 此時更新 mt7688duo.py 需要設定成 0.0.9
應用規格
- 參考農業感測計畫第一步
- 感測器
- 雨量 sensor
- 土壤濕度
- 水位計
- 人體紅外線感測器
- 致動器
- 影像監視
哈爸實做筆記
- 由於板子還沒收到,沒事幹,先搞很花時間的
- OpenWRT
- 感覺用 Mac 來 build OpenWRT 似乎有問題
- 先換成 Linux 試試看。使用 VirtualBox + Ubuntu
- use pre-defined ubuntu image ( item 18, 15.04)
- Install guest addon
- Download MTK SDK, toolchain
- OpenWrt’s build system – About
- OpenWrt build system – Installation
- Follow installation
- => 問題還在,沒有 target 可以選
- 改用 OpenWRT git 的來試試看, git clone git://git.openwrt.org/openwrt.git
- apt-get install gawk
- make menuconfig 可選到 MT7688
- CONFIG_TARGET_ramips=y
- CONFIG_TARGET_ramips_mt7688=y
- CONFIG_TARGET_ramips_mt7688_LinkIt7688=y
- CONFIG_HAS_SUBTARGETS=y
- CONFIG_TARGET_BOARD="ramips"
- make
- 參考 Chapter 7
- 7.1. Building a firmware => PASS (Ubuntu 15.04)
- #15-Ubuntu SMP Thu Apr 16 23:32:37 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
- Firmware Upgrade
- Get start blink example: PASS
- 6.6. Programming with Firmata Protocol: PASS
- Python as MQTT client
- pip install paho-mqtt
- Downloading/unpacking paho-mqtt
- Downloading paho-mqtt-1.1.tar.gz (41kB): 41kB downloaded
- Running setup.py (path:/tmp/pip_build_root/paho-mqtt/setup.py) egg_info for package paho-mqtt
- Installing collected packages: paho-mqtt
- Running setup.py install for paho-mqtt
- warning: build_py: byte-compiling is disabled, skipping.
- warning: install_lib: byte-compiling is disabled, skipping.
- Successfully installed paho-mqtt
- mt7688duo
- MQTT receive LASS data by quick porting lass.py
- MQTT send: PASS
- pyFirmata read digital/analog: PASS
- 視訊: PASS
- 接上 Logitech C170 WebCAM
- mjpg_streamer -i "input_uvc.so -f 20 -d /dev/video0" -o "output_http.so"
- http://mylinkit.local:8080?action=stream
- Porting Verification code
- The original verification code Sensor-GroveGasSensorO2,Sensor-GroveMoisture,Sensor-GroveWaterSensor can still compile success
- Arduino SoftwareSerialExample compile succcess
LASS installation
- Installation procedure:
- 1. install mt7688duo.ino by using Arduino IDE
- 2. copy non-ino files into mylinkit.local:/root by scp
- 3. ssh [email protected]
- chmod 755 mt7688duo_install.sh
- /root/mt7688duo_install.sh
- Running procedure:
- python mt7688duo.py
- Setup run when power up
- add one line to /etc/rc.local before exit 0
- python /root/mt7688duo.py
- README
如何中斷跑到一半的 mt7688duo.py
- 連進另外一個 ssh,
- ssh [email protected]
- 找正在執行的 PID( process ID)
- ps
- ex: 1648 root 16016 S python mt7688duo.py
- 停止它
Q&A
- 為何我們不選沒有 Duo?
- 可參考陪你問 Q7
- 主因是因為 LASS 精神是讓大家可以客製化感測器,所以感測器能夠支援的周邊就盡可能要能多元,而且不希望使用者遇到太多的技術問題。
- Duo 支援 Arduion IDE, 又使用 Atmel 的MCU, 符合這些系統要求
- In SDK 6.4, 我們該選擇什麼模式?
- 初期,我們選擇以下兩方案並行,基本上以某個 APP_ID為單位
- Scenario #1: Through primitive UART connection
- 簡單,比較沒有 framework 的干擾。可能比較能處理控制端自主的方案
- Scenario #2: Through Firmata protocol
- 在後面更多的使用者情境中,我們需要 Linux 當成主控平台,以及沒有必要直接處理 UART
- 等待對兩個方案有更清楚的認知後,再看下一步怎麼做
- 該選 Python 還是 Node.js
- 基本上 Python 與 Node.js 都是很高階,設計很好的環境,兩種都有很廣大的使用者,與使用情境。
- 建議可以 support 雙環境,看社群的發展,主環境選擇用 Python
- 主因是 Python 在各式各樣的情境都很適合用, LASS 在 Client/Server 環境中也已經大量使用。使用 LASS 的 User 不需要另外多學一個語言
- 主架構與感測器客製化在概念上是區隔開來,也就是要客製化感測器的使用者,不用那麼瞭解整個主系統的運作
- 不同的情境是用 APP_ID 來實現,如何讓兩 CPU 協同一個 APP_ID
- 原來設計類似單一個 Thread, 目前類似多了一個 senosr thread, 如何做好協同?
- 在 Firmata 情境中,似乎周邊被 generalize 了,這對感測系統客製化是個概念上的升級,如何發揮這個特性?
- 盡量讓 MCU 內的 code, general 化,使用一點點的 hack 出 LASS 必要的功能
- MPU 要求 MCU 感測,在多感測器情況下是要下多次命令還是只下一次命令
- 由於可能遇到感測器時間希望同步的問題,基本精神是下一次命令取回所有的感測器值。架構上也可以支援分開下命令
- 需不需要將 Firmata 命令由 byte 改長一點,因為LASS sensor 命名為類似 d0,d1
- GPS 要交給MPU or MCU?
- 怎麼在 Firmdata 架構下使用 G3 (SPI 介面)
- 因為 一個 UART 用在 MPU<->MCU 通訊,一個 UART 最好留給 MCU 當debug console. 所以建議使用 Software Serial
- Software Serial Example
- 怎麼在 Firmdata 架構下使用 DHT22 (客製化 digital 介面)
- 找 沒有使用的 digital/analog pin, 在 MCU 中寫死這個 pin 的運作,然後假裝回傳