LASS - LinkIt Smart 7688Duo - 初始帶起

最後編輯:2016-04-21 建立:2015-12-25 歷史紀錄

 

WUULONG S緣起

  • 好用,強悍,能有更多的應用,價格低,對未來更多的佈建有幫助

 

規格

  • LASS 選用 LinkIt Smart 7688 Duo

 

步驟

  • 資料收集
    • 官網 Study
    • 前人的規劃 Study
  • 系統設計
    • 基本概念
  • Arduino 讀取 ADC sensor 確認
  • python 讀取 sensor 值確認
  • 上傳 MQTT
  • Porting 現有架構進來
  • 個別子功能支援

 

資料收集

哈爸陪你問 - 如何成為 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

pyfirmata

 

目前狀態

  • 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
    • 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...
  • }
    wuulong sheuWifi應該是open wrt管理的⋯ 只要取得狀態就好了。
    wuulong sheuScenario #1: Through primitive UART connection 還需要設計進去
    wuulong sheu

 

  • github 目錄規劃
    • mt7688duo_install.sh : 安裝腳本,只需執行一次
    • mt7688duo.py : MPU LASS 主程式
    • mt7688duo.ino : MCU LASS 主程式
      cclljj@gmail.com是否多一個設定檔,規範每一個APP_ID使用哪些 sensor,以及相對應的 codes
      wuulong sheu好主意

 

版本命名規則

  • 因為兩個主程式 ( 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
    • 土壤濕度
    • 水位計
      • 是否要用壓力感測器取代(便宜以及應用用途廣)
    • 人體紅外線感測器
  • 致動器
    • Relay 控制
  • 影像監視

 

哈爸實做筆記

  • 由於板子還沒收到,沒事幹,先搞很花時間的
  • OpenWRT
    • 感覺用 Mac 來 build OpenWRT 似乎有問題
    • 先換成 Linux 試試看。使用 VirtualBox + Ubuntu
    • 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
    1. 接上 Logitech C170 WebCAM
    2. mjpg_streamer -i "input_uvc.so -f 20 -d /dev/video0" -o "output_http.so"
    3. 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
    Arthur HsuOnly Arduino IDE 1.6.5-r5 works. 1.6.4, 1.6.7, and 1.6.8 don't don't work.
  • 2. copy non-ino files into mylinkit.local:/root by scp
  • 3. ssh root@mylinkit.local
  • 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

  1. 連進另外一個 ssh,
    1. ssh root@mylinkit.local
  2. 找正在執行的 PID( process ID)
    1. ps
    • ex: 1648 root 16016 S python mt7688duo.py
  3. 停止它
  • kill 1648

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 不需要另外多學一個語言

 

 

  • 在雙 CPU 系統如何實現 LASS 設計精神?
  1. 主架構與感測器客製化在概念上是區隔開來,也就是要客製化感測器的使用者,不用那麼瞭解整個主系統的運作
  2. 不同的情境是用 APP_ID 來實現,如何讓兩 CPU 協同一個 APP_ID
  3. 原來設計類似單一個 Thread, 目前類似多了一個 senosr thread, 如何做好協同?
  4. 在 Firmata 情境中,似乎周邊被 generalize 了,這對感測系統客製化是個概念上的升級,如何發揮這個特性?
    1. 盡量讓 MCU 內的 code, general 化,使用一點點的 hack 出 LASS 必要的功能
  5. MPU 要求 MCU 感測,在多感測器情況下是要下多次命令還是只下一次命令
    1. 由於可能遇到感測器時間希望同步的問題,基本精神是下一次命令取回所有的感測器值。架構上也可以支援分開下命令
  6. 需不需要將 Firmata 命令由 byte 改長一點,因為LASS sensor 命名為類似 d0,d1
  7. GPS 要交給MPU or MCU?
    cclljj@gmail.com如果要交給MPU的話,可以使用硬體方法(USB GPS receiver),也可以使用軟體方法(例如 Python 的 geolocation module: https://pypi.python.org/pypi/geolocation-python/0.2.0),似乎比較有彈性。
    wuulong sheu以主架構來說,感測器硬體能交給 MCU 就交給MCU, 如果能上 geolocation就最棒了,那用 MPU 比較合適。主要先看 geolocation 能不能在 MPU run
  1. 怎麼在 Firmdata 架構下使用 G3 (SPI 介面)
    1. 因為 一個 UART 用在 MPU<->MCU 通訊,一個 UART 最好留給 MCU 當debug console. 所以建議使用 Software Serial
      1. Software Serial Example
  2. 怎麼在 Firmdata 架構下使用 DHT22 (客製化 digital 介面)
    1. 找 沒有使用的 digital/analog pin, 在 MCU 中寫死這個 pin 的運作,然後假裝回傳