我將網路上看到的、感興趣的、跟Raspberry Pi相關的資訊收集如下。如果您發現任何新奇驚人的新聞或專案,還請留言告知。
Wolfson Microelectronics | Wolfson Audio Card from element14 - High Definition Audio for the Raspberry Pi®,rpi也有音效卡了,element14販售,採用Wolfson的音訊處理晶片,高品質音訊24-bit / 192KHz,有一般3.5mm輸出入也有S/PDIF數位輸出入,可錄音,適合作為語音控制的專案。
2014/03/21
Raspberry Pi情報彙整(23)
標籤: Raspberry Pi
2014/03/18
新書發表:Arduino輕鬆入門:範例分析與實作設計
書名:Arduino輕鬆入門:範例分析與實作設計
作者:我
頁數:456頁
出版日期:2014年2月19日
出版社:博碩文化(書號PG21403 )
ISBN:978-986-201-870-5
印刷:單色
一本從零開始介紹Arduino的入門書,不管是硬體還是軟體方面,都從最基本的層級開始講解,希望能引導初學者快速入門Arduino這套熱門的電子原型開發平台,打造您心中醞釀已久的專案。
★有硬有軟,電子零件與程式碼完全掌握。
★逐步學習,基本的LED與開關,直到溫濕度感測器、馬達、紅外線、無線傳輸、等等技術。
★介紹各種感測器,偵測氣溫、濕度、壓力、彎曲程度、等等。
★解說何謂驅動電路,如何掌控大電壓與大電流,操控馬達製作雙輪電動車。
★容易看懂的電路圖,按圖施工,保證成功。
★從簡單的程式碼著手,慢慢邁向更複雜的功能,提供原始碼檔案下載。
★收錄有趣的小遊戲專案:包括石頭砸雞蛋、打鼓機、肺活量測試機、請你跟我這樣做。
書裡的電路圖,使用一套名為Fritzing的開放原始碼軟體來繪製,所有原始程式碼與電路圖檔案(彩色),都可到GitHub下載,只需點按「Download ZIP」即可全部打包下載,書籍章節內也會註明個範例專案的所在路徑。
第1章,Arduino導論,從零開始介紹Arduino這套開放原始碼電子原型開發平台,自造者(Maker)運動、歷史源流、細數官方推出的開發板、以及各種相容產品與模組,然後介紹Arduino的軟體部分並在各作業系統上安裝驅動程式,本章結束之時,您面前就會有一套準備就緒的軟硬體開發環境。
勘誤表:
如果您發現書中有任何錯誤,還請留言告知,謝謝。
嚴重程度:高
頁數:291
位置:表10.3
修正: 應互換粉紅線與黃線對應的Arduino腳位,將「對應Arduino腳位11的驅動腳位」與「對應Arduino腳位10的驅動腳位」互換
【2016.04.03新增】
頁數:177
位置:圖6-12
修正: 圖中的82kΩ電阻,其一腳接到5V,錯了,應接到GND。
頁數:180
位置:圖6-13
修正: 圖中的82kΩ電阻,其一腳接到5V,錯了,應接到GND。
【2016.05.29新增】
頁數:263
位置:圖9.15的電路圖錯了,其中二極體(1N4001)的接法錯了
修正: 請見下圖,或到GitHub。
嚴重程度:低
頁數:144
位置:所需零件裡的「8×8 陰極單色LED 矩陣」
修正: 將「陰極」改為「共陰極」
頁數:150
位置:程式碼5.9裡面的註解「將資料快閃記憶體裡,不佔用SRAM」
修正: 將「將資料」改為「將資料放進」
頁數:171
位置:第一行末端「音量強落」
修正: 將「強落」改為「強弱」
頁數:
位置:倒數第三行的「2 號計時器則負責腳位11 與3 的PWM」
修正: 將「2 號計時器」改為「2 號計時器(Timer 2)」
頁數:183
位置:6.6 Wave擴充版裡的「由一塊音訊負責解碼檔案」
修正: 將「音訊」改為「音訊晶片」
頁數:228
位置:程式碼8.2裡的註解
修正: 在「Uno是 3 Leonardo是 13 」的「3」與「Leonardo」之間插入逗號「,」
頁數:360
位置:12.2的第一行裡的「第一章」
修正: 將「第一章」改為「第1章」
頁數:368
位置:零件材料裡的電阻,忘記寫上色環
修正: 將「220Ω電阻」改為「220Ω電阻(色環:紅紅棕)」;將「470Ω電阻」改為「470Ω電阻(色環:黃紫棕)」
頁數:387
位置:倒數第三行的「Lego Mindstorm」
修正: 將「Lego Mindstorm」改為「Lego Mindstorms」
【2014.04.16新增】
頁數:308
位置:第一段第四行後面,「比較」重複了
修正: 將「選購時請比較比較能驅動...」改成「選購時請比較能驅動...」
頁數:321
位置:程式碼10.13裡的註解
修正:將「假定當電流從BACKWARD流向FORWARD 輪子往前轉」的「往前轉」改成「往後轉」
頁數:328
位置:程式碼10.17裡的註解
修正:將「假定當電流從BACKWARD流向FORWARD 輪子往前轉」的「往前轉」改成「往後轉」
【2014.08.17新增】
頁數:64
位置:第二段,第二行與第四行,圖編號錯了(有兩處)
修正: 將「圖3.3」改成「圖3.5」(有兩處)
【2014.12.18新增】
頁數:200
位置:倒數第二段,程式庫Timer的網址
修正:若照書中網址下載,將會下載1.x版,但書中範例使用的是2.x版;請改到2.x版的網址https://github.com/JChristensen/Timer/tree/v2.1下載,或是直接使用本書原始碼網站(https://github.com/yehnan/arduino_book_yehnan)裡提供的Timer程式庫。
【2015.04.27新增】
頁數:266
位置:倒數第二段,第三行,有個錯字
修正: 將「答靈頓」改成「達靈頓」
【2016.01.13新增】
頁數:43
位置:第一段第三行,圖標號錯了
修正: 將「圖2.8」改成「圖2.9」
頁數:43
位置:第二段最後一行,圖標號錯了
修正: 將「圖2.9」改成「圖2.10」
頁數:44
位置:第二段第二行,圖標號錯了
修正: 將「圖2.11」改成「圖2.12」
2014/03/16
FTDI FT232RL仿冒品
FTDI FT232R是顆有名的「USB轉TTL Serial介面」晶片,Arduino Duemilanove開發板就包含這顆晶片與電腦端溝通,許多獨立的轉接板或轉接線也使用這顆晶片。其他有名的同類型晶片還有Prolific的PL-2303系列、Silicon Labs的CP2102、等等。
有了這種「USB轉TTL Serial介面」轉接板(卡)或轉接線,就可以燒錄麵包板上的Arduino(ATmega微控制器),也可以登入Raspberry Pi主控台。
看了「FTDI FT232RL: real vs fake : ZeptoBars」這一篇詳細比較了兩者差異的文章後,才知道有假貨,而且做的很像,厲害。
讓我想起一位朋友的經驗,他設計好的電路板,送到工廠去打上零件,結果工廠換了零件,於是就出問題了;嘿,就算零件看起來幾乎一樣,也有可能是仿冒的,唉,真假難辨啊。
2014/03/15
Arduino練習:以開關切換LED是否閃爍
這一篇以「Arduino練習:以開關切換LED明滅狀態」為基礎,但功能改成:按一下開關,LED開始閃爍,再按一下開關,LED熄滅,依此類推。
這一篇不會有太多說明,若對Arduino、程式庫、開關bounce問題等等不熟悉的話,還請參考我其他的文章:Arduino文章列表,或是參考我寫的Arduino入門書:Arduino輕鬆入門:範例分析與實作設計。
我的環境:Windows XP、Arduino 1.0.5、板子是Arduino Uno R3。
電路圖很簡單,就是一個LED與一個開關而已。
首先是使用millis記錄時間的版本,程式碼可到這裡下載;使用millis記錄時間,比較上次與這次的時間後,決定做什麼事情。注意,程式內沒有使用delay函式。
#define LED_PIN 13
#define SWITCH_PIN 12
#define DEBOUNCE_DELAY 200
unsigned long lastDebounceTime;
int ledBlinkStatus;
#define LED_BLINK_TIME 300
unsigned long lastUpdateLedTime;
int ledStatus = LOW;
void setup() {
pinMode(LED_PIN, OUTPUT);
pinMode(SWITCH_PIN, INPUT);
}
void updateLedBlinkStatus(){
unsigned long currentTime = millis();
if((currentTime - lastDebounceTime) > DEBOUNCE_DELAY){
lastDebounceTime = currentTime;
ledBlinkStatus = !ledBlinkStatus;
}
}
void updateLed(){
if(ledBlinkStatus){
unsigned long currentTime = millis();
if((currentTime - lastUpdateLedTime) > LED_BLINK_TIME){
lastUpdateLedTime = currentTime;
ledStatus = !ledStatus;
}
}
else{
ledStatus = LOW;
}
digitalWrite(LED_PIN, ledStatus);
}
void loop() {
int switchStatus = digitalRead(SWITCH_PIN);
if(switchStatus == HIGH){
updateLedBlinkStatus();
}
updateLed();
}
另一個則是使用程式庫Timer與Bounce的版本,程式碼可到這裡下載,程式庫Timer的用法請參考這篇,程式庫Bounce的用法請看這篇。
#include <Bounce.h>
#include <Timer.h>
#define LED_PIN 13
#define SWITCH_PIN 12
#define DEBOUNCE_DELAY 50
int ledBlinkStatus = 0;
Bounce bouncer = Bounce(SWITCH_PIN, DEBOUNCE_DELAY);
#define LED_BLINK_TIME 300
Timer timer;
int8_t timer_id;
void setup() {
pinMode(LED_PIN, OUTPUT);
pinMode(SWITCH_PIN, INPUT);
}
void loop() {
if(bouncer.update() == true && bouncer.read() == HIGH){
ledBlinkStatus = !ledBlinkStatus;
if(ledBlinkStatus){
timer_id = timer.oscillate(LED_PIN, LED_BLINK_TIME, HIGH);
}
else{
timer.stop(timer_id);
digitalWrite(LED_PIN, LOW);
}
}
timer.update();
}
使用程式庫後,程式碼變短許多。
2014/03/14
Arduino:自訂整組資料讀寫EEPROM
Arduino的AVR微控制器晶片裡,含有EEPROM,可在程式執行時動態讀寫資料,不因電源中斷而消失。可使用Arduino官方程式庫EEPROM進行存取,但其介面以「一個byte」為單位,用起來有點不便,底下介紹如何自訂C語言struct,作為讀寫單位。
我的環境是Arduino Uno板、軟體版本1.0.5。
分成兩個檔案,首先是eeprom_anything.h:
#ifndef eeprom_anything_h
#define eeprom_anything_h
#include <Arduino.h>
#include <EEPROM.h>
// 利用這兩個C++模板,讀寫整組資料
// 參數address是EEPROM位址,參數data是想讀寫的資料結構
template <class T> int EEPROM_writeAnything(int address, const T &data);
template <class T> int EEPROM_readAnything(int address, T &data);
// 函式模板的定義
// 使用EEPROM程式庫寫入一個一個的byte
template <class T> int EEPROM_writeAnything(int address, const T &data)
{
const byte *p = (const byte *)(const void *)&data;
int i, n;
for(i = 0, n = sizeof(data); i < n; i++)
EEPROM.write(address++, *p++);
return i;
}
template <class T> int EEPROM_readAnything(int address, T &data)
{
byte *p = (byte *)(void *)&data;
int i, n;
for(i = 0, n = sizeof(data); i < n; i++)
*p++ = EEPROM.read(address++);
return i;
}
#endif
然後是主草稿碼EEPROM_struct.ino:
#include <EEPROM.h>
#include "eeprom_anything.h"
// 自行定義struct,放入你想讀取的資料
struct dataType{
char name[10];
int age;
char gender;
float money;
float bank;
};
void setup(){
Serial.begin(115200);
dataType d; // 宣告結構變數,放入資料
strcpy(d.name, "Arduino");
d.age = 9;
d.gender = 'M';
d.money = 9876.54;
d.bank = 1234.56;
Serial.print("name: ");
Serial.println(d.name);
Serial.print("age: ");
Serial.println(d.age);
Serial.print("gender: ");
Serial.println(d.gender);
Serial.print("money: ");
Serial.println(d.money);
Serial.print("bank: ");
Serial.println(d.bank);
// 寫入EEPROM,回傳值count代表總共寫入幾個byte
int count = EEPROM_writeAnything(0, d);
Serial.print(count);
Serial.println(" bytes written.");
Serial.println("---------------");
}
void loop(){
// 讀取EEPROM,回傳值count代表總共寫入幾個byte
dataType d;
int count = EEPROM_readAnything(0, d);
Serial.print("name: ");
Serial.println(d.name);
Serial.print("age: ");
Serial.println(d.age);
Serial.print("gender: ");
Serial.println(d.gender);
Serial.print("money: ");
Serial.println(d.money);
Serial.print("bank: ");
Serial.println(d.bank);
Serial.print(count);
Serial.println(" bytes read.");
while(1){
}
}
其執行結果應輸出類似底下的訊息:
name: Arduino
age: 9
gender: M
money: 9876.54
bank: 1234.56
21 bytes written.
---------------
name: Arduino
age: 9
gender: M
money: 9876.54
bank: 1234.56
21 bytes read.
耶!
參考資料:
- Arduino官方文件 - EEPROM程式庫。
- Cooper Maa: Arduino 筆記 – EEPROM Library 使用簡介。
- Cooper Maa: 可讀寫任何資料的 EEPROM 函式,這篇文章主要的參考資料。
- Tutorial: Your Arduino's inbuilt EEPROM。
- Using EEPROM | Memories of an Arduino | Adafruit Learning System。
- EEPROM advanced usage on Arduino Uno / ATMega328 | Michael Bouvy。
2014/03/12
宣傳3月16日CAVEDU新品與課程發表會
幫忙Cave團隊宣傳一下。
在2014初春3月16日星期天下午,Cave將會展示新品與課程。詳細情形與報名網址還請到官網,不需要報名費喔。到時還會有抽獎活動,獎品有Raspberry Pi、OZONE、Akafugu電子創作套件等等。
地點在MakerBar,場地很大。
13:30 開場白:Cave教育團隊、MakerBar以及其他協力夥伴簡介。
13:50 86Duino,x86核心的國產Arduino相容板。
14:20 Raspberry Pi ,更多周邊、擴充板與創作資源。
14:50 Scratch PICO board,國中小程式教學的好工具。硬體與課程規劃建議。
15:20 交換名片、吃吃喝喝、認識朋友。
16:00 CAVEDU 2014新課程、活動與發展計畫。
16:30 Maker Faire機器人比賽說明搶先看(機器人循跡搬運競賽 / 坦克大決戰)。
17:00 結語、好禮大抽獎。
Arduino Robot,Arduino官方推出的機器人套件。
2014/03/10
Raspberry Pi情報彙整(22)
我將網路上看到的、感興趣的、跟Raspberry Pi相關的資訊收集如下。如果您發現任何新奇驚人的新聞或專案,還請留言告知。
BBC News - Sony creates 26 jobs at Pencoed factory to meet demand,哇,生產rpi的英國工廠招募新員工耶,出乎我意料,rpi的銷售強勁,第二年賣的比第一年還多。
其他還有Scrolling text with a Raspberry Pi and LED Matrix | Mark's space dot com以rpi讓8x8 LED矩陣捲動文字。
標籤: Raspberry Pi
2014/03/09
Raspberry Pi兩週年、VideoCore IV釋出OpenGL ES原始碼、2014 Jamboree
回想當初,Raspberry Pi在2012年2月29日正式開賣,當天有10萬片板子的訂單,供不應求,嘿,當天我也是跟大家一樣搶破頭,但過了好幾個月以後,產量才能滿足需求,我也才拿到板子;到如今,Raspberry Pi已經兩歲囉,銷售量也達到2.5百萬,相當驚人。
在這兩年間,Raspberry Pi基金會馬不停蹄,不僅推出相機模組,資助各種與Raspberry Pi相關的軟硬專案,也朝著當初的宗旨前進,也就是「教育」,要把學習電腦科學與程式設計的熱情帶回校園,製作各種教材,
Broadcom釋出圖像處理器VideoCore IV的OpenGL ES 1.1及2.0驅動程式原始碼,採用三條款BSD(3-clause BSD license),不過是給BCM21553用的,還需要進行移植到Raspberry Pi的BCM2835,Raspberry Pi基金會也拿出獎金舉辦競賽,希望有人挺身而出完成移植工作,評判標準就是跑Quake III,競賽辦法在此,有興趣的人也可先看看VideoCore IV的架構文件。
BCM2835裡還有很多跟多媒體相關的部分仍未開放原始碼。板子的電路設計也沒有公開,不過根據Eben Upton的解釋(Raspberry Pi marks 2nd birthday with plan for open source graphics driver | Ars Technica),開放這麼高階的資訊,助益甚小,非營利組織的基金會將沒有足夠的收入,也就無法像現在一樣資助許多開源碼專案了,諸如XBMC、PyPy、Wayland、Scratch、WebKit等。
Raspberry Pi的軟體架構(釋出VideoCore IV原始碼之前)。
2014 Jamboree剛剛落幕(2月27、28日),基金會的Ben與Carrie Anne上台演講,述說打入校園與教室的困難處,也說要重新設計網站;14歲的Matthew Timmons-Brown也侃侃而談關於機器人的種種,還把Raspberry Pi包在復古外殼裡,回到BBCMicro的BASIC年代。
參考資料:
- Open Source ARM userland | Raspberry Pi 2012.10.24。
- A birthday present from Broadcom | Raspberry Pi 2014.03.01。
- Android for All: Broadcom Gives Developers Keys to the VideoCore® Kingdom | Broadcom Connected,Broadcomm官方消息。
- Broadcom VideoCore IV architecture overview | Searching for the divine code。
- 十個專訪Raspberry Pi創始人Eben Upton的問題 - Make 國際中文版,原文在此10 Questions for Raspberry Pi’s Eben Upton | MAKE。
- Raspberry Jamboree – The Big Write-up #RJamboree #RaspberryPi | Raspberry PiPod,會後報導。
- Jamboree Raspberry Pi Second Birthday » RasPi.TV。
- Raspberry Pi Official 7 inch DSI prototype – preview » RasPi.TV,比較7"DSIPi與HDMIPi。
- How popular can the Raspberry Pi get? | News | TechRadar,。
標籤: Raspberry Pi
2014/03/04
Raspberry Pi小玩意兒:Raspbian秀出水族箱(文字介面版)
上次寫了一篇「Raspberry Pi小玩意兒:Raspbian讓牛說Hello World」,有位網友RockShooter Black留言告知,在「動畫演示10個有趣但毫無用處的Linux命令 - Linux - 香港矽谷」可找到更多有趣的東西,真不錯,譬如蒸汽火車、駭客任務、火焰、金屬文字風格等等效果,大都只要下個指令安裝套件即可,非常簡單,但有個文字模式的水族箱asciiquarium,安裝過程較為困難,所以記錄如下。
目標是安裝asciiquarium(以Perl語言撰寫),需要Term-Animation模組,而又需要Curses模組,進而又需要ncurses這套程式庫。
首先安裝ncurses。
$ sudo apt-get install libncurses5-dev
注意:不可安裝libncursesw5-dev。
然後到網頁http://search.cpan.org/~giraffed/Curses-1.33/下載Curses-1.33.tar.gz,並解壓縮:
$ wget http://search.cpan.org/CPAN/authors/id/G/GI/GIRAFFED/Curses-1.33.tar.gz
$ tar zxvf Curses-1.33.tar.gz
進行設定、編譯並安裝(安裝詳情都在INSTALL檔裡):
$ cd Curses-1.33
$ perl Makefile.PL
$ make
$ sudo make install
(其中make所需時間較長)
然後到網頁http://search.cpan.org/~kbaucom/Term-Animation-2.6/lib/Term/Animation.pm下載Term-Animation-2.6.tar.gz,並解壓縮:
$ wget http://search.cpan.org/CPAN/authors/id/K/KB/KBAUCOM/Term-Animation-2.6.tar.gz
$ tar zxvf Term-Animation-2.6.tar.gz
進行設定、編譯並安裝(安裝詳情都在README檔裡):
$ cd Term-Animation-2.6
$ perl Makefile.PL
$ make
$ make test
$ sudo make install
最後下載asciiquarium,解壓縮、放到執行路徑裡,並修改權限:
$ wget http://www.robobunny.com/projects/asciiquarium/asciiquarium.tar.gz
$ tar zxvf asciiquarium.tar.gz
$ cd asciiquarium_1.1
$ sudo cp asciiquarium /usr/local/bin
$ sudo chmod 0755 /usr/local/bin/asciiquarium
最後執行
$ asciiquarium
就可以看到文字模式的水族箱囉。
asciiquarium作者還有另一個專案,叫做weatherspect,可顯示天氣、風速、濕度,安裝過程類似:
$ wget http://robobunny.com/projects/weatherspect/weatherspect.tar.gz
$ tar zxvf weatherspect.tar.gz
$ cd weatherspect_v1.11
$ sudo cp weatherspect /usr/local/bin
$ sudo chmod 0755 /usr/local/bin/weatherspect
最後執行
$ weatherspect
第一次執行時,會問你住在哪個地方,可填入城市名。然後便可看到類似如下的畫面。
參考資料:
標籤: Raspberry Pi
2014/03/01
Raspberry Pi情報彙整(21)
我將網路上看到的、感興趣的、跟Raspberry Pi相關的資訊收集如下。如果您發現任何新奇驚人的新聞或專案,還請留言告知。
Code Club Pro: a training programme to support primary school teachers,Raspberry Pi的目標在於「教育」,將學習電腦科學與程式設計的課程引入教育系統,這可不是弄出一塊硬體開發板、選定一支程式語言、寫寫一堆教材就了事的任務,其中最重要的一環便是「教師」,而Code Club Pro正是提供此種教育訓練的組織。
其他還有Connecting an Arduino to a Raspberry PI using I2C、RaspMap可查詢板子上的各元件、Develop Java Applications Using a Raspberry Pi由Oracle提供的線上課程、。
標籤: Raspberry Pi