Category Archives: 聯發科LinkIt家族

[LinkIt 7697開發板上市啦!] 燒燙燙開箱規格報你知

本文要介紹聯發科技實驗室推出的7697開發板,包括其硬體規格、Arduino環境建置以及基礎I/O控制。

作者/攝影  曾吉弘
時間  3小時
成本  LinkIt 7697開發板
難度  * * *
材料表
  • 個人電腦
  • LinkIt 7697 開發板

認識LinkIt 7697

  • 採用 ARM Cortex-M4, 192 Mhz
  • 擁有 352 KB RAM, 4MB Flash
  • 同時支持 Wifi 802.11 b/g/n 和 Bluetooth LE 4.2 雙通訊功能
  • 主要軟體支持FreeRTOS 與Arduino

LinkIt 7697 是以MediaTek MT7697 系統單晶片SoC. 為核心的開發板,支援Wi-Fi 與Bluetooth Low Energy( BLE)通訊功能。您可使用GCC、IAR embedded workbench 或 KEIL uVision 來編寫原生的 LinkIt SDK。或者可採用相當普遍的 Arduino IDE (已經幫入門使用者架好了) 來編寫 Arduino 草稿碼並運用周邊驅動程式與函式庫。

腳位配置(圖片來源 labs.mediatek.com)

與Arduino UNO 簡單比較一下

LinkIt 7697Arduino UNO
微控制器聯發科MT7697Microchip ATmega328p
主時脈192 MHz16 MHz
RAM352K2K
Flash3612K32K
Wi-Fi802.11 b/g/n
BLEBLE 4.2
尺寸48 x 26 mm69 x 53 mm
週邊硬體支援普通非常好

規格一覽

模組wrtnode^7 (wrtnode.com)
晶片MT7697

Cortex-M4 with FPU @ 192Mhz

RAM352 KB
Flash4 MB
Wi-Fi802.11 b/g/n (2.4G)
Bluetooth4.2 LE
尺寸48×26 mm
作業電壓3v3
輸入電壓5v (microUSB)
USB2UARTCP2102N
周邊介面GPIO x18

UART x2

I2C x1

SPI x1

PWM x18

EINT x4

ADC x4 (0~2.5V)

IrDA x1

I2S x1

除錯介面SWD x1
可用的SDKLinkIt SDK

Arduino for LinkIt 7697

LinkIt 7697腳位配置

Download (PDF)

Arduino環境建置與 LED 閃爍-簡易實作教學

Arduino環境建置

請先下載 Arduino 1.6 之後的輸入“http://download.labs.mediatek.com/package_mtk_linkit_7697_index.json”,如下圖:版本,開啟Arduino IDE之後,請於 File/Preferences中的 Additional Board Url 欄位中

接著開啟 Tools/Board,在 Board Manager 中輸入 7697 會看到以下畫面:

安裝驅動程式

7697 需要安裝CP2102N VCP driver,下載之後解壓縮,根據您的作業系統版本點選CP210x_Windows_Drivers資料夾中的 x64 或 x86.exe

完成之後系統就會給予7697 一個 COM port。請於裝置管理員中檢視,Arduino IDE 的 Tools/Ports 也會看到同樣的 port 號:

基礎範例操作

數位輸出 LED Blink

檔案路徑:File/Examples/01. Basic/Blink

萬丈高樓平地起,使用 Blink 來控制吧,唯一不同之處請將LED的腳位改為7號, 代表7697的P7腳位,也就是 USR LED。接線方式如下圖:

void setup() {
  pinMode(7, OUTPUT);

}

void loop() {
  digitalWrite(7, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(7, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}

類比輸入 analogReadSerial

檔案路徑:File/Examples/01. Basic/analogReadSerial

在此有一些關於LinkIt 7697的類比輸入腳位需要注意的地方:

  1. 7697 的 ADC 輸入電壓範圍是 0 到5V,並非3.3V。
  2. 7697 ADC 解析度為 12-bit,因此analogRead()的數值範圍是 0 ~ 4095
  3. 在 Arduino IDE 中,A0 是對應到 7697 的 ADC_IN0 (P14) ,也就是說P14~17 分別代表Arduino的A0~A3,請參照先前的腳位配置圖。

請按照以下來接線,請注意這樣的做法可讓5V降到 2.5V:

void setup() {
  Serial.begin(9600);
}

void loop() {
  // read the input on analog pin 0:
  int sensorValue = analogRead(A0);
  // print out the value you read:
  Serial.println(sensorValue);
  delay(1);        // delay in between reads for stability
}

 

[DuoKit Browser ] 7688物聯網開發板的iOS解決方案

本系列文將介紹 DuoKit 與 DuoKit Browser 這個 iOS 裝置端的控制方案,您可以透過網頁以及 iOS app ( iphone 或 iPad)與您的 7688 (Arduino Yun系列板子也可以) 開發板互動。

作者/攝影  曾吉弘
時間  3小時
成本
難度  * * *
材料表
  • iOS 裝置,例如 iphone 與 ipad,作業系統版本為 iOS7以上
  • 7688 Duo 開發板  


DuoKit 為聯發科技為 LinkIt Smart 7688 Duo 以及其他 Arduino Yún 相容開發板(Arduino + OpenWRT)建構的開源專案,只需要簡單設定就能控制/存取區域網路內的開發板。此外,DuoKit運作時不需要外部網路連線也不需要中央雲服務,控制端裝置僅需與開發板位於同一區域網路之中,即可從行動裝置端(手機或電腦)進行偵測與存取。也不需要額外申請帳號,更適合隱私需求較高的智慧家庭環境。

如果您擁有 iOS 裝置(例如:iPhone、iPad),DuoKit Browser 為 DuoKit 所對應的管理工具,或透過瀏覽器使用 REST API 進行相關控制,或自行撰寫您常用用平台上的控制工具。

本文將介紹如何匯入 DuoKit 函式庫到您的 Arduino IDE中,就能透過 Restful API 控制/讀取7688 Duo 的腳位狀態。

DuoKit 環境設定

    接著介紹如何建置 DuoKit 所需的運作和開發環境。

安裝 Arduino 函式庫

  • 請下載Arduino IDE (http://arduino.cc),解壓縮即可  
  • 請到 GitHub 下載 DuoKit 的最新版本函式庫(https://github.com/x43x61x69/DuoKit/archive/master.zip),並解壓縮。
  • 開啟 Arduino IDE,點選「 Sktech → Include Library → Add .ZIP Library…

  • 選取於上一步驟中解壓縮文件夾內的「lib → Arduino → DuoKit」資料夾並按「選擇」,完成之後即可在 Example下看到 DuoKit 這個資料夾。

開發板設定:首次使用 DuoKit 時,依據開發板型號需先進行相關設定。

  • 請先確認您的 LinkIt Smart 7688 Duo 韌體版本是否為 0.9.4 或更高的版本,以避免網路相關的問題(版本可透過開發板 WebUI 介面查詢)。
  • 使用 putty 或其他連線程式連線至您的裝置,在terminal中使用下列指令開啟的 Yún Bridge 服務(預設為關閉):

 

uci set yunbridge.config.disabled='0'
uci commit
reboot
DuoKit 函式庫內建數個範例,草稿碼皆可透過 Arduino IDE 選單中的「檔案 → 範例 → DuoKit」中查看。DuoKit 的基本架構如下:

#include <DuoKit.h>           	// 引入 DuoKit 函式庫
DuoKit duokit;                    	// 宣告 DuoKit 物件
void setup()
{
	duokit.begin();  // 初始化 DuoKit
}
void loop()
{
	duokit.loop();	// DuoKit 核心功能
}

您可以在原本的專案中加入以上程式碼就能 DuoKit 大多數的功能,例如:透過 DuoKit Browser 對開發板進行基本控制。DuoKit 包含了多項進階功能:

  • 設定腳位I/O模式
  • 存取腳位狀態
  • 存取變數
  • 自定義使用者介面

  DuoKit Browser則可實作上述的功能,只要加入對應的程式碼即可透過 DuoKit Browser 控制 7688 Duo 開發板。

 

請上傳範例「Basic」至開發板,即可透過 REST API 存取相關變數(以 LinkIt Smart 7688 Duo 預設名稱為例):

  •  讀取變數「count」: http://mylinkit.local/arduino/read/count
  •  修改變數「count」為 123.45http://mylinkit.local/arduino/update/count/123.45

或者,您可以透過 DuoKit Browser 視覺化瀏覽範例內的設定值,詳細請見之後的「透過 DuoKit 定義預設使用者操作介面」內容。

* 註:DuoObject 所使用的字串型別為 String(字串物件)而非 C 語言的 char 陣列。

  •  透過 DuoKit 定義預設使用者操作介面:

與變數存取類似,您亦可透過 DuoKit 中的 DuoUI 物件,於 Arduino 草稿碼當中定義一組預設的使用者操作介面設定細節(參考範例「Basic」)。在 DuoKitBrowser 內呈現結果如圖所示:

首先,您必須先初始化一個 DuoUI 陣列(範例中長度為 6):

DuoUI layout[6];

接著設定陣列內的物件:

void setup()
{
	// 略
	duokit.layoutProfile = "Basic Controller”;  // 裝置名稱(選擇性)
 
	layout[0].type  	= DuoUIWebUI;                           	// 第一個物件類型為 WebUI 介面
	layout[0].name  	= "Access WebUI";                    	// 此項目的說明文字
 
	layout[1].type  	= DuoUISwitch;                          	// 第二個項目類型為開關
	layout[1].name  	= "Built-in LED";                        	// 範例為內建的 LED 燈
	layout[1].pin   	= LED_BUILTIN;                          	// 內建 LED 的腳位,7688 Duo 為 13
	layout[1].interval  = 10;                                             	// 自動刷新的時間間隔。不設定或設定為 0 則停用自動刷新
 
	layout[2].type  	= DuoUIValueGetter;    	// 第三個項目類型為數值顯示
	layout[2].name  	= "Program started";   	// 範例為程式執行時間
	layout[2].key   	= "boot";                                    	// 為前述 DuoObject 陣列中的對應關鍵字名稱
	layout[2].interval  = 5;
 
	layout[3].type  	= DuoUIValueSetter;    	// 第三個項目類型為數值設定
	layout[3].name  	= "This is count";        	      // 範例為變數「count」
	layout[3].key   	= "count";
	layout[3].interval  = 10;
 
	layout[4].type  	= DuoUIValueSetter;
	layout[4].name  	= "This is fixed";
	layout[4].key   	= "fixed";
	layout[4].interval  = 10;
 
	layout[5].type  	= DuoUISlider;             	// 第五個項目類型為滑桿(Slider)
	layout[5].name  	= "Slider for fixed";
	layout[5].key	   = "fixed";
	layout[5].min   	= 0;                                            	// 滑桿的最小值
	layout[5].max   	= 9999;                                     	// 滑桿的最大值
	layout[5].interval  = 10;
 
	duokit.setLayout(layout, 6);                                        	// 將初始化完成的 DuoUI 陣列指向 DuoKit 物件
	// 略
}

使用 DuoKit Browser

DuoKit Browser 為 DuoKit 在 iOS 上一款免費且開源的對應控制程式。您只需要具備 iOS 裝置,搭配 DuoKit 即可專注於開發板端的設計,輕鬆透過行動裝置實現智慧家庭;亦可以依自己的需求客製化相關的進階功能,可以免費於 App Store 下載(https://itunes.apple.com/us/app/id1196094443):

您可依照個人喜好或需求更改上述 DuoUI 的值,每個 DuoUI 物件所需的參數可在 DuoKit Github 找到相關文件。

下一篇將介紹如何透過 DuoKit Browser 控制 7688 板子的腳位狀況

相關文章:

 

[ MakeNTU_MTK 研習營 ] 課程記錄&常用的7688Duo作品教學分享

作者/攝影 徐豐智/薛皓云、洪卉君
課程時間  2017 2/17 4hr
課程講師  徐豐智
課程場地  台大-新生教學館

大家好,這周六日即將進行MakeNTU,今天想先跟大家分享一些MTK企業獎主題OpenData的網站,作為製作作品的參考

寒假依然努力不懈的各位

最近佑緣助教也有試一個不錯的API,可以用python抓溫度資料,推薦給大家DarkSky API。六日早上會出現在三創園區,大家可以把握機會捕獲他~

 

其他的助教與老師還在確認時程,我們預計周六周日早上到下午會在各位的場區擺攤,有需要可以來問問題喔。當天上課資料在這裡

 

正在推眼鏡的皓云助教

附上雷虎遙控車 – 使用LinkIt Smart 7688 改裝成FPV第一人稱視角載具一枚

 

台大電機土生土長的宗穎助教

有些操作小技巧可以看這邊

 

在台上抓著麥克風獨唱的我

在大家背後默默付出的阿倫助教

 

以及本團隊的藏鏡人阿吉

 

最後還是寒假也努力學習的各位囉!

打完收工,下台一鞠躬,下次再見。

[課程紀錄]物聯網實作工坊-7688教師研習@TQC

作者/攝影 曾吉弘
課程時間  2017 1/12,13
課程講師 曾吉弘
課程場地 TQC電腦技能基金會

新年新氣象,1/12 13 兩天於TQC電腦技能基金會舉辦了7688物聯網講師研習,

兩天課表的 Google doc 在這邊,請和我們一起學習吧!

 兩天研習的好處就是可以慢慢教,大家也有一個晚上的時間稍微緩衝一下,不然這些內容要一天全部上完,物聯網課程又比單純Arduino的課程來得複雜很多,硬體、網路

我們把 LinkIt Smart 7688 Duo 的大小秘辛都講過一遍,簡列大綱如下:

  第一天上午   7688 Duo 硬體介紹以及當作 Arduino使用

  第一天下午   7688 網路設定與 openWRT 操作 (檔案系統,以及如何執行Node.js / python)

                       Mediatek Cloud Sandbox 介紹 -> 繼電器(數位輸出) 控制

  第二天上午   MCS影像串流 / 照片上傳,這是 7688 最特別的地方,用它做一個

  第二天下午   上傳感測器資料 (Node.js + Arduino / python + Arduino)

                       如何外部取得 MCS channel 的資料點 (JSON format)

  在此需要好好說一下,在此之所以使用 1+1 的方式而非純Arduino 或 純 Node.js / Python 的原因(很多學員也很困惑):

  1. 很多電子周邊有Arduino函式庫,但不一定有 Node.js / Python 的函式庫
  2. Arduino IDE 的聯網功能與 Node.js / Python 相比弱多了,以[[LinkIt Smart 7688] MCS 上傳資料] 教學,您可以看到Arduino code < 20行,Node.js / Python code <30行,輕鬆愉快喔

下圖是上傳光敏電阻資料到 MCS 的資料頻道上:

相關文章:

[誰偷喝我的五十嵐?] 使用7688 Duo與MCS雲服務打造小偷偵測系統

本文說明如何使用 7688 Duo 搭配 Mediatek Cloud Sandbox 雲服務做一個小偷偵測系統

作者/攝影  曾吉弘
時間  3小時
成本
  • 7688 Duo 開發板 = $600
  • PIR 紅外線感測器 = $
  • Webcam (Logitech C170) = $600
  • USB OTG轉接線 = $100
難度  * * * * * * *
材料表
  • 可聯網的個人電腦 (作業系統可用 Windows, Mac OSX 與 Linux,本範例使用 Windows 7) 只要能SSH登入 7688 來編寫 Node.js程式即可
  • 7688 Duo 開發板
  • PIR 紅外線感測器
  • Webcam (Logitech C170)
  • USB OTG轉接線


1.MCS端設定

  • 請登入Mediatek Cloud Sandbox,建立一個原型,裡面需有一個 Image Display channel,在此 channelId 為 image。這筆資訊需寫在 Node.js 程式中不可寫錯

  • 針對這個原型建立一個測試裝置,並記下 DeviceId, DeviceKey

2.7688 Duo 端設定

    • 將PIR感測器接好,訊號腳位接到D7,另外的Vcc 與 GND 就這是因為 7688 Duo 的 GPIO(0)與MCU D7連通,所以我可以用 pin.read(); 語法去讀取PIR是否被觸發。
    • 如果您有 7688 Duo 擴充板的話,就可以直接把 webcam 接上擴充板上的 USB host 接口,不然就需要額外的 USB OTG轉接線。

    • 請先將您的7688 Duo 連上外部網路,並SSH登入。請先執行以下指令來更新與安裝必要的函式庫:
      1. $ opkg update      (更新可用軟體)
      2. $ opkg install fswebcam  (拍攝照片軟體)
      3. $ npm install mcsjs   (Node.js的 mcs 函式庫)
      4. $ npm install bluebird –save  (另一個本範例所需的函式庫)
    • 使用 vim 或 nano 開啟一個 .js 檔並貼上以下內容,請把相關資訊改為您的資料。

                  $ nano imageupload.js


var m=require('mraa');
var mcs = require('mcsjs');   //匯入所需函式庫
var exec = require('child_process').exec;
var Promise = require('bluebird');
var fs = Promise.promisifyAll(require("fs"));

var pin=new m.Gpio(0);  //GPIO(0) -> D7
pin.dir(m.DIR_IN);          //設定該腳位為輸入模式

var myApp = mcs.register({
  deviceId: 'XXXXX',
  deviceKey: 'OOOOO',   //在此填入您MCS test device 的 ID, Key
  host: 'api.mediatek.com'
});


checkButton();

function checkButton() {
  var btn=pin.read();  //讀取PIR腳位狀態
  if(btn==0) {
     //一秒之內只能按一次,這個偵測頻率可自行修訂
    setTimeout(checkButton,1000);   
    console.log('button pressed');
    takeSnapshot();
  }
  else setTimeout(checkButton,100);  //每0.1秒讀取一次D7狀態
}

function takeSnapshot() {

    child = exec('fswebcam -i 0 -d v4l2:/dev/video0 --no-banner -p YUYV --jpeg 95 --save /tmp/test.jpg',
      function (error, stdout, stderr) {
      console.log('stdout: ' + stdout);
      console.log('stderr: ' + stderr);
      if (error !== null) {
        console.log('exec error: ' + error);
      }
      //讀取已拍照的圖檔
      fs.readFileAsync('/tmp/test.jpg')
        .then(function(data) {
        myApp.emit('Image','', new Buffer(data).toString('base64'));
      });
    });
}

 

 

 

3.檔案確定都好了之後,使用 Ctrl + x離開 nano (vim 的話是 :wq),使用以下語法執行:

              $ node imageupload.js

4.請在PIR感測器前方,如果一直觸發或一直無法觸發,請調整PIR感測器上的十字鏍絲來得到比較好的偵測效果(應該說…  PIR的效果不算太好,受不了的話可以改用更簡單的 pushbutton)。您就能在MCS test device頁面上看到有照片被上傳了,可以點選該資料頻道右上角->打開歷史資料,就可以看到到底有幾張照片。

5.在此有個有趣的事情值得大家關注一下,我們每次照相的檔名都是 test.jpg,所以您如果在多次拍照之後,到 /tmp 資料夾中看看,一樣只有一張 test.jpg,因為每次都會覆寫掉前一張照片。但是這不會影響MCS上傳的功能。

 

相關文章:

LinkIt Smart 7688 Duo 之 Arduino COM埠閃退篇

本文將說明LinkIt Smart 7688 Duo 的 Arduino COM port 常見的問題與處理方式

文:Ted Lee李俊德  個人CC授權發布於CAVEDU blog [1]

延伸閱讀:LinkIt Smart 7688 Duo-Wi-Fi 掛點急救篇

 

Q:我的7688 Duo(以下簡稱7688D)在Arduino IDE上時常行蹤飄忽不定,有時會在燒錄Arduino草稿碼(sketch(以下簡稱Arduino程式)之前找不著指定的COM埠(port,有時程式燒到一半它就不見了。更糟的是,還會有程式順利燒好了,原本配置的埠卻也不見,再也找不到?

A:

問題思考 在探究問題的根源之前,我們需要先了解Arduino程式如何在7688D上執行的整個過程,將之整理為圖1。

以Arduino IDE寫好的程式對作業系統來說皆屬於應用程式的性質,此類應用程式會呼叫作業系統的系統服務(system services,並透過驅動程式將此程式傳到Arduino晶片上。Arduino晶片上的啟動程式(bootloader,以啟動程式簡稱)會將之載入內部的記憶體後不斷地重覆執行(Arduino程式會循環地執行loop()副程式區塊(block內的程式碼)。

因此,先排除硬體故障和作業系統錯誤的可能性(可用另一片正常的Arduino交叉測試)與Arduino程式的撰寫錯誤(可找另一可執行無誤的程式替換),我們可以合理懷疑都是驅動程式或啟動程式「惹的禍」!

image002

圖1:Arduino程式在7688D上從燒入到執行的一連串過程[2]

 

本問題的解法有三[3]

一. 重置MCU 如開發手冊(Developer’s Guide的3.1節所述,按下MCU重置鈕(MCU Reset Button 後讓ATmega32U晶片重新啟動(reboot

image004

圖2:重置MCU

二. 重灌驅動程式 在Windows作業系統的裝置管理員(device manager內確認7688D的驅動程式是否運作正常。如果異常,請参考本文的「複習」一節重新再安裝一次適合您電腦作業系統版本的驅動程式。

image005

圖3:可從裝置管理員中確認7688D驅動程式是否正確被作業系統識別(recognize[4]

補充說明:在您玩7688D時是否曾注意到這個COM埠,有時名稱是B(啟動程式COM埠)、有時卻出現G(一般COM埠)呢?原因是這樣的:

  1. 啟動程式COM:這個COM埠是由ATmega32U4上的啟動程式提供。它出現的時機有二:
    1. 當使用者剛重新燒錄ATmega32U4的啟動程式但還未燒錄Arduino程式時,這個COM埠會出現。
    2. 當使用者快速按兩下MCU重置鈕時,此COM埠會短暫出現後才切換到Arduino程式提供的COM埠。
  2. 一般COM:這個COM埠Arduino程式提供(使用者本身沒有寫它,但Arduino函式庫(library一定會連結)。如果Arduino程式錯誤或寫壞記憶體時,這個COM埠就可能會消失。

 

三:重裝啟動程式:使用AVRDUDE(AVR Downloader/UploaDEr)套件這個命令列工具(command line tool將啟動程式重新到ATmega32U的快閃記憶(flash momory[5]

  1. 將Caterina-smart7688.hex(通常放在C:\Users\使用者名稱\AppData\Local\Arduino15\packages\LinkIt\hardware\avr\0.1.6\bootloaders\caterina\之下)複製到USB隨身碟(handy drive
  2. 將此隨身碟(以USB-A1稱之)插到7688D上。
  3. 使用Putty工具以SSHSecure Shell方式連入7688D後(注意:使用SSH連線時你的電腦和7688D需在同一網段下),下達:

avrdude -p m32u4 -c linuxgpio -v -e -U flash:w:Caterina-smart7688.hex -U lock:w:0x0f:m

其中各參數[6] 說明如下:

-c:程式代號(programmer-id)。linuxgpio:Linux GPIO(General Purpose Input/Output,通用輸出/入)組態(configuration

-p:零件編號(part no)。m32u4 表示 ATmega32U4

-U:執行記憶體操作

-e:清除(erase)

-v:詳列的輸出訊息(verbose)

  1. 成功重燒妥啟動程式的畫面如圖4所示:

image006

圖4:以AVRDUDE指令重燒啟動程式的成功畫面。

Continue reading

LinkIt Smart 7688 Duo-Wi-Fi 掛點急救篇

本文將說明LinkIt Smart 7688 Duo Wi-Fi 常見的問題與處理方式

文:Ted Lee李俊德  個人CC授權發布於CAVEDU blog

Q:我的7688 Duo(以下簡稱7688D)上的Wi-Fi LED永遠都亮著,既不在外網模式Station mode──無法連外網;也不在內網(Access Point模式──無法連內網192.168.100.1。它變磚(brick了嗎?

A:

Wi-Fi燈一直亮著的情況可分成「解決之道、軟體工程師的聖經、根本原因(root cause)、哪裡可以問?」共四部份來思考,我們先一個步驟接一個步驟(step by step的詳細列出兩種解決方法(solutions:重置(reset)及解磚。第二到四奌再來補充此問題衍生出的(derived各種可供思考的各種可能的面向(aspects


 解決之道
 做法有二:

  1. Reset Wi-Fi 長按7688D上的Wi-Fi reset按鈕20秒以上[2],誏它回復到出廠預設值(factory reset[3]

001

圖1:MTK以Gitbook建立的線上知識庫

圖2:YouTube上的「MediaTek LinkIt™ Smart 7688 tutorial. Perform factory reset.」影片。

003

圖3:FB上專門討論MTK的LinkIt Smart家族的LinkIt開發社群社團,有MTK首席工程師進駐(on site解惑。

2. 解磚──更新韌體(firmware update) 我們將完整的做法詳列如下:[4]

  1. 從MTK官網下載啟動映像檔 lks7688.img[5]
  2. 將I備妥的檔案複製到USB隨身碟(handy drive根目錄(root directory下(根目錄不需清空)。
  3. 將此隨身碟連到7688 Duo的USB埠(port。II-III的配置如圖4所示。

004

圖4:解磚第II-III步,備妥乾淨的啟動程式映像檔。

4. 同時按下Wi-Fi及MPU的重置鈕,再放開MPU重置鈕後誏Wi-Fi重置鈕持續按壓20秒以上。

5. 待Wi-Fi的LED燈亮起後,放開Wi-Fi重置鈕。此時7688 Duo會開始讀取啟動程式(Wi-Fi LED會快速閃爍)並將它升級(upgrade。這個過程會持續2秒左右。

圖5:YouTube「MediaTek LinkIt™ Smart 7688 tutorial – Bootloader upgrade with USB」影片。


複習(review

7688D接上電源後會發生的兩件事(如圖6)以做為本問題的控制組(control group

  1. 開機階段(booting phase 供電、初始化載入程式(loader、載入OpenWrt、Wi-Fi備妥。
  2. 四種狀態(states 正常開完機後,7688D被設定為只連內網的AP模式時,若LED燈號熄滅則表示此刻沒有其他人連入。此外,若每秒燈號閃爍3次後再停頓5秒,則表示有人連到7688D;另一方面,在連外網的情況下,若每秒閃爍2次表示此刻7688D正連接外網中。除此之外,就表示它和外網是接通的。

006

圖6:7688D開機流程及其隨後會進入的四種狀態。

Continue reading

160701 T客邦 7688 物聯網實作坊周五班,課程結束囉

四個週五晚上的 7688 物聯網實作坊結束囉,最後一堂課的內容有三樣:

  1. 取得 MCS test device 上的資料點,並解析 JSON 格式資料
  2. 將 7688 的影像上傳到 MCS 的 Video 頻道中
  3. 上傳感測器 (A0 類比輸入腳位) 到 MCS  (參考資料)

能有機會與學員共度四個愉快的晚上,更何況班上許多業界前輩先進,還教我許多有趣的應用(這樣可以把課程擴充到6周嗎?哈哈) 也知道更多人是用怎樣的眼光來看物聯網這個領域,以及對於開發板與雲服務的期待。

我們的投影片都放在 slideshare,請點我喔~

IMG20160701213232 - 複製

IMG20160701202259

 

[LinkIt] 使用 LinkIt Smart 7688 控制繼電器

來用 MCS 搭配 7688 控制繼電器吧,您會發現使用 nodejs 的話,程式可說是相當清爽呢!

您需要在 MCS 上建立一個具有 on/off 的 Controller Data channel,請參考我的 test device 畫面,您在程式碼中需要設定正確的 deviceId, deviceKey 與 Channel Id 才可順利操作。

iao

電路接線如下圖,繼電器的訊號腳位請接到 7688 Duo 的 D7 也就是 GPIO #0,另外兩隻則分別接電(5V) 與接地即可。其他更多 7688 的內容請參考本文末的 7688 教學投影片喔

7688_relay_bb

實體照片,學員採用的是 2-channel 的繼電器來控制燈泡,但控制方法是一樣的,就是高低電位而已。

2016-06-29 21.20.16

現在我們在T客邦創客基地開課,很熱鬧喔

264282

nodejs code 如下,其實只要把 GPIO(44) 改為 GPIO(0)即可

var mcs = require('mcsjs');  //宣告所需模組
var m = require('mraa');      //宣告所需模組
var myRelay = new m.Gpio(0);   
//請改為 m.Gpio(0) 來控制D7 pin = GPIO #0 

myRelay.dir(m.DIR_OUT); //設定繼電器訊號腳位模式為輸出

var myApp = mcs.register({
     deviceId: 'OOO',
     deviceKey: 'XXX',
});
// 在此改為您 MCS test device 的 device ID 與 device Key

myApp.on('RELAY_Control', function(data, time) {
 if(Number(data) === 1){
     console.log('Relay on');   //顯示訊息
     myRelay.write(0);      //繼電器啟動
 } else {
     console.log(’Relay off');
     myRelay.write(1);
 }
});
Control 7688's relay with MCS

7688教學投影片


 

LinkIt Smart 7688 在 Windows 下的 Arduino IDE 注意事項

在安裝 LinkIt Smart 7688 Duo 的 Arduino IDE 時,除了版本建議使用 1.6.4 以外,在Windows 作業系統安裝arduino.inf 在Windows需要解除數位簽章限制,目前確認主要會發生問題的是 Windos 8、8.1與 Win 10。

請依照下列步驟來解除數位簽章限制

  1. 設定->最下方”變更電腦設定”
  2. “更新與復原”>”復原” >下,點選右邊的 “進階啟動”,此時電腦會直接重開機
  3. 接下來進入藍色畫面,選擇疑難排解->進階選項->啟動設定>重新啟動
  4. 選擇 “7.停用驅動程式強制簽章”
  5. 重開機以後就可以順利安裝 7688 Duo 的Arduino的驅動程式了

[5/29 物聯網應用發表會有什麼?] 聯發科 LinkIt 家族與 MCS 雲服務

下周日就是5/29物聯網應用發表會,您報名了嗎?當天除了有Amazon AWS IoT 預計在當天展示的智慧小屋微軟的 Cognitive Service 應用,當然也有聯發科的 LinkIt ONE 家族與 MCS雲服務展示。

Mediatek Labs 夥伴表示,當天的分享主軸是”LinkIt Smart 7688 的各種可能方向“,希望能大家知道他們提供的東西對使用者 / 學生 “可以做到什麼”、”可以學到什麼”。您將可以聽到聯發科 LinkIt 小組的同仁與大家分享 7688 各種可能與未來的應用走向。這兩片小板子發表以來,在社群中的話題度一直居高不下,可連接的雲服務也與來愈多,足見其重要性呢
002
據說當天會請到 Mediatek Labs 的王牌小蜘蛛(使用 LinkIt Smart 7688製作)到現場,對於機器人聯網的後續應用有興趣的朋友,請千萬別錯過。
[youtube=https://youtu.be/70pN0Rd0ca4]
近日已經起跑的 2016通訊大賽,其中的[聯發科技物聯網開發競賽] 已針對大專教師開設了 2 場 workshop(台北台中),下周就陸續會有高雄、台南與桃園場次,期待各位老師的參與喔!
003
160530_物聯網教師研習@台中女中

[LinkIt Smart 7688] MCS新功能:即時影像串流頻道

 

大家好~ 我是偉和,最近MediaTek Cloud SandBox 加入了兩種新的資料通道:Video StreamImage,本文要來介紹如何在 MCS 上即時觀看 7688 上的 webcam 影像,這樣不論您人在何方,只要連到 MCS 就可以看到影像,遠端影像監控功能就完成啦!

請注意,MCS 說明每個裝置的每月流量為 3GB,但如果每個裝置是指測試裝置的話…   那只要重新建立測試裝置就好啦,ㄎㄎ

0001

160224 物聯網IoT體驗夜

原文網址

Continue reading

[DesignSpark PCB] 給 LinkIt Smart 7688 的馬達擴充板

本篇是紀錄文,由於在 7688 新書當中會寫到如何控制雙馬達機器人,由於 7688 (或大多數的 Arduino) 都需要另外搭配馬達控制晶片如 L293D 或 TA7279 才能控制直流馬達,因此搭配麵包板的話接線會變得相當繁雜,因此就來自己洗一片電路板來搭配 7688 使用吧 (Arduino 的馬達教學投影片在本文末)

DesignSpark PCB 相關文章請點我

這是我們預計放在書裡面的雙馬達履帶機器人,前方的 webcam 是接在 7688 的 USB host port,這樣就可以透過 mjpg streamer 直接開影像串流 (例如 http://<7688IP>:8080)

至於為什麼要用履帶不用一般的雙馬達車身?當然是因為履帶霸氣啊!(任性)

12644693_668342716601981_2819921881878327939_n

下圖是我們洗出來的 7688 馬達控制電路板第一版,之後測試 ok 的話就會把檔案分享給各位喔

12642992_668611963241723_7130865261717433329_n


 

[LinkIt Smart 7688] FPV第一人稱輪型機器人- 可愛小瓦力

來用 LinkIt Smart 7688 做一個輪型機器人吧,還可以用 Android 裝置遙控呢!加裝一個攝影機就可以FPV第一人稱控制,可以從網頁端看到 webcam 的影像。

本範例使用 App Inventor 來編寫手機端程式來控制機器人,除了可看到 webcam 影像之外,還可以根據手機傾斜度來控制兩輪速差來達到轉彎的效果,用這個來辦機器人闖關賽一定超刺激啊!

實際測試的結果,30m 之內的開闊空間(沒有牆)的影像都還挺即時的。來看看是誰入鏡了呢?

2015-12-23 14.02.37

 

本機器人由台科大機械工程研究所黃傑同學與台灣大學大氣系黃偉峻同學製作,由CAVEDU代為寫開箱文,特此註明


硬體組裝

接線方式如下 (圖片引用自聯發科創意實驗室)。將 7688 Duo 的 D2~5 接到 L298N 模組上,馬達的正負引線就接到模組左右兩側的螺絲接頭。

但實際上我們是將模組與 7688 Duo 分開供電,模組採用 8顆3號電池 (8 x 1.5V = 12V )的電池盒,開發板就用行動電源。因為在此採用的馬達為 12V,這樣也是比較好的做法。否則容易因為瞬間電流過大讓板子關機甚至傷害到板子。

螢幕快照 2016-01-12 下午6.27.02

使用的馬達驅動模組為 L298N,在露天或一些網路電子材料行不難找

正面照,還真的挺像瓦力,就差兩隻手囉。機身是用雷射切割的木板,不是太堅固。不過外觀有履帶就贏一半了!走起來有履帶嘎嘰嘎嘰的聲音聽起來就很過癮啊。

2016-01-10 22.41.08

背面全貌

2016-01-10 22.41.32

另一個背面角度可以看到機體分成兩層,上層塞馬達,下層由左到右則是給馬達用的12V電池盒、行動電源、與插在麵包板上的 7688 Duo。黑色的 USB 線是 WebCam,白色則是行動電源供電。下一版應該可以更精巧堅固一點

請注意裝載 webcam 的 servo 現在沒有作用,也就是說機器人的脖子不會轉動

2016-01-10 22.42.07

2016-01-10 22.41.51   2016-01-10 22.41.19


 

7688端程式

7688 在這個系統中扮演 server 的角色,App Inventor 則是 client 去對 server 發送 POST。

#匯入相關函式庫
import BaseHTTPServer
import struct, fcntl, os
from pyfirmata import Arduino, util
from time import sleep  


board=Arduino('/dev/ttyS0') #定義Arduino連接埠
led=board.digital[13]       #定義LED腳位

EN1=board.get_pin('d:9:p')
IN1=board.digital[2]
IN2=board.digital[3]

EN2=board.get_pin('d:10:p')
IN3=board.digital[5]
IN4=board.digital[7]
GAIN=25.0   #輪速增益值,可視實際情況修改

def catch(recievedata):
  button=0;
  angle=0;
  num=0;
  try:
    num = recievedata.find(',');
    pass
  except:
    return

  button=int(recievedata[0:num]);  #判斷手機端按了哪個按鈕
  try:
      angle=int(recievedata[num+1:len(recievedata)]);
      pass
  except:
      return
  
  L_control=0;
  R_control=0;
   if angle>=0:
    L_control=(100-angle*GAIN)/100.0; #根據angle控制左輪速
    R_control=1;
  elif angle<0:
    L_control=1;
    R_control=(100+angle*GAIN)/100.0; #根據angle控制右輪速

  #控制上下限
  if L_control<0:
    L_control=0;
  elif L_control>1:
    L_control=1;
  if R_control<0:
    R_control=0;
  elif R_control>1:
    R_control=1;

  #顯示相關訊息
  print 'L'
  print L_control
  print 'R'
  print R_control

  if button==0:   #停止
    led.write(0);
    EN1.write(0);
    IN1.write(0);
    IN2.write(0);

    EN2.write(0);
    IN3.write(0);
    IN4.write(0);
    #pass
  if button==1:   #左轉
    led.write(1);
    EN1.write(L_control);
    IN1.write(0);
    IN2.write(1);

    EN2.write(R_control);
    IN3.write(0);
    IN4.write(1);
    #pass
  if button==2:   #右轉
    EN1.write(L_control);
    IN1.write(1);
    IN2.write(0);

    EN2.write(R_control);
    IN3.write(1);
    IN4.write(0);
    #pass
  pass

#處理網路通訊
class ServerHandler(BaseHTTPServer.BaseHTTPRequestHandler):
    def do_HEAD(self):
        self.send_response(200)
        self.send_header("Connection","Close")
        self.end_headers()
    def do_GET(self):
        print ("======= GET STARTED =======")
        print (self.headers)

    def do_POST(self):
        self.send_response(200)
        self.send_header("Connection","Close")
        self.end_headers()
        print ("======= POST STARTED =======")
        print (self.headers)
        print ("======= POST VALUES =======")
        length = int(self.headers['content-length'])
        item = self.rfile.read(length)
        catch(item)
        print (item)

class WebServer(BaseHTTPServer.HTTPServer):
    def __init__(self, *args, **kwargs):
        BaseHTTPServer.HTTPServer.__init__(self, *args, **kwargs)
        # Set FD_CLOEXEC flag
        flags = fcntl.fcntl(self.socket.fileno(), fcntl.F_GETFD)
        flags |= fcntl.FD_CLOEXEC
        fcntl.fcntl(self.socket.fileno(), fcntl.F_SETFD, flags)


server_class = WebServer

#29876 是指開出來的http port
httpd = server_class(("", 29876), ServerHandler)

httpd.serve_forever()
LinkIt Smart 7688 robot - python

 

App Inventor 端程式

App Inventor 端的程式會連線到 7688 AP 之後取得影像,並利用 Web元件來發送指令給 7688 來控制馬達轉向與轉速。

Designer頁面

這是一個橫式握持的介面,這樣觀看影像的效果會比較好,操作機器人只需要右手拇指就可以完成。請注意在此的 WebViewer 是用來取得來自 7688 的 Webcam 即時影像。Web元件則是用來對 7688 下指令。

螢幕快照 2016-01-12 下午6.02.01

Blocks頁面

宣告相關變數

螢幕快照 2016-01-12 下午6.01.15

程式初始化

您的手機需要先連到 7688 的 AP,為了怕 IP 變動所以 7688 在此不連到外部網路,IP 皆為預設的 192.168.100.1。程式啟動時會去連上 7688 所開的 http port。Web元件是用來對 7688 發送 POST 指令來控制機器人。WebViewer 元件則是單純取得 7688 的 webcam 影像串流,效果則根據網路通暢度而定。

螢幕快照 2016-01-12 下午6.01.49

按鈕控制動作

Button 的 TouchDown (手指觸摸螢幕)與 TouchUp(手指離開螢幕) 事件。請注意 Button.Click 是觸摸又離開,也就是 TouchDown + TouchUp。因此如果我們拆開的話,就可以用一個按鈕來執行兩件事。

以 Button_Forward 前進按鈕來說,TouchDown時會把 action 設為1。以 Button_Backward 後退按鈕來說,則是把 action 設為2。這樣 7688 就知道按下了哪一個按鈕。

放開兩個按鈕(Button的TouchUp事件)時,action變數值即為0,這時 7688 收到的 button變數就是0,機器人就會停止動作。

螢幕快照 2016-01-12 下午6.01.09

定時發送 request 給 7688

使用 Clock 元件定時發送指令給 7688 來控制機器人。您可以看到 steer 變數值是加速度計 Y軸的四捨五入結果,如果希望再細膩一點的控制的話,可以加到小數點一位。接著把相關 ( steer / action 變數值) 訊息顯示在兩個 Label 上

根據 send flag 使用 Web.PostText 指令把 action 與 steer 變數值以文字格式發送給 7688。

螢幕快照 2016-01-12 下午6.01.29

 

類似的專案還有