Upload
wei-tsung-su
View
753
Download
0
Embed Size (px)
Citation preview
Yun Mini與一般的Arduino有甚麼差異?
● 基於Arduino Leonardo (ATmega32u4微控制器)● 多了一顆Atheros WiFi SoC (AR9331 / AR9330 rev. 1)
○ 處理器:
■ MIPS 24Kc架構(32-bit RISC)
■ 運作頻率最高可達400 MHz
○ 網路
■ 內建802.11n (傳輸速度最高可達150Mbps; 天線架構: 1I1O)
○ 作業系統/協定堆疊
■ Linino (OpenWrt-Yun Linux)
■ OpenWrt wireless stack
○ 程式設計環境
■ 內建Python 2.7
注意: Yun沒有做電壓(5V)調節(voltage regulator),所以外接電源時請小心!
3
Yun Min (續)
7
● 32U4 RST○ 重置ATMega32U4微控制器
● YUN RST○ 重置AR9331 - 重新啟動Linino Linux (在RAM中的程式和資料會消失 )
● WLAN RST○ 按下超過5秒: 還原WiFi設定(IP: 192.168.240.1)
○ 按下超過30秒: 還原Linux (在Flash ROM中的資料會被全部還原 )
Linino - 網頁介面
● 如何登入Linino的網頁介面○ 將Yun Mini接上電源
○ 將電腦WiFi連結至SSID為Linino-XXXXXXXXXXXX的AP
■ XXXXXXXXXXXX是MAC位址
○ 以瀏覽器開啟http://192.168.240.1
○ 輸入密碼: doghunter // 或是arduino (根據韌體不同 )
○ 將WiFi設定連結到指定的AP
注意: 如果不知道取得的IP,可以透過進入Linino的Shell底下以ifconfig指令找wlan0介面的IP位址。
(請參閱下一張投影片了解如何進入Linino的Shell) 9
Linino - Shell介面
● 如何透過USB進入Linino的Shell?○ 使用USB連接電腦與Yun Mini
○ 利用電腦終端機軟體以 UART(USB模擬)進入Linino的shell (預設不須輸入密碼 )
● 利用透過SSH進入Linino的Shell?○ 前提
■ Yun Mini的WiFi連線已設定好
■ 執行SSH的電腦要與Yun Mini在同一個區域網路
○ 利用電腦SSH軟體連線到Yun Mini的IP (預設帳號密碼 : root/doghunter)
10
Linino - Shell介面(續)
● 如何安裝其他套件?○ 利用opkg (https://www.arduino.cc/en/Tutorial/YunPackageManager)
■ # opkg update (更新套件資料庫 )
■ # opkg install [套件名稱] (安裝套件)
■ # opkg remove [套件名稱] (移除套件)
■ # opkg upgrade [套件名稱] (更新套件)
11
Arduino Yun Mini與Arduino IDE
● Yun Mini可以透過WiFi與Arduino IDE連結○ 可以寫入Sketch
○ 可以在Console中顯示Yun Mini的輸出訊息
● 如何使用○ 前提
■ Yun Mini的WiFi連線已設定好
■ 執行Arduino IDE的電腦要與Yun Mini在同一個區域網路
○ 在Arduino IDE的「工具」>「序列埠」中選擇 linino-[IP位址](Arduino Yun)
注意: 透過WiFi寫入Sketch或開啟Console時會要求輸入密碼(預設為doghunter)
12
在Sketch中透過WiFi與Console互動
#include <Console.h>
void setup() { Bridge.begin(); Console.begin();
while(!Condsole){ ; //等待連線 { //將訊息顯示在Console上 Console.println(“Conectted!”);}
int incomingByte;
void loop() { //讀取Console送過來的資料 if(Console.available() > 0) { incomingByte = Console.read(); // DO SOMTHING }}
13
利用Process在Sketch中執行Linux程式
#include <Process.h>
void setup() { Bridge.begine(); Console.begine(); while(!Console){ ; } Console.println(“Connected!”);
runLinuxProcess();}
void runLinuxProcess() { Process p; p.begin(“curl”); p.addParameter(“[URL]”); p.run();
while(p.available()>0){ char c = p.read(); Console.print(c); }}
14
利用Bridge以REST API存取Yun Mini
● 設計自己的REST API存取Yun Mini (白色部分可自行設計並撰寫程式處理)○ 設定PIN模式
■ 將PIN 13設定為Input: http://[Yun Mini的IP位址]/arduino/mode/13/input
■ 將PIN 13設定為Outpu: http://[Yun Mini的IP位址]/arduino/mode/13/output
○ 讀取PIN
■ 讀取數位PIN 13的數值: http://[Yun Mini的IP位址]/arduino/digital/13
■ 讀取類比PIN 2的數值: http://[Yun Mini的IP位址]/arduino/analog/2
○ 寫入PIN
■ 將1寫入數位PIN 13: http://[Yun Mini的IP位址]/arduino/digital/13/1
■ 將123寫入類比PIN 2: http://[Yun Mini的IP位址]/arduino/analog/2/123
15
利用Bridge以REST API存取Yun Mini (續)
#include<Bridge.h>#include<YunServer.h>#include<YunClient.h>
YunServer server;
void setup(){ Bridge.begin(); server.begin();}
void loop(){ YunClient client = server.accept(); if(client){ process(client); client.stop(); } delay(50); //避免同時太多requests} 16
// 只處理http://[IP位址]/arduino/digital/13/(0 或1)void process(YunClient client) { //client只會收到”digital/13/0” String command = client.readStringUntil(‘/’);// 取得”digital” int pin, value; if(command==”digital”) { //處理數位PIN pin = client.parseInt(); // 取得”13”轉成整數13 if(client.read(“/”)) { // 寫入數位PIN value = client.parseInt(); digitalWrite(pin, value); } else { // 讀取數位PIN value = digitalRead(); client.print(value); } }}
利用Bridge以REST API存取Yun Mini (續)
17https://www.youtube.com/watch?v=fv9JKGalzKc