Arduino Yún獨立運作的問題

Photo Credit: jProgr via flickr.com

物聯網是當紅炸子雞,早就想用Arduino來做些不一樣的事情,最近拿出買了之後的沒用到的Arduino Yún來進行實驗,當然,最經典的例子莫過於把感測器的資料,透過電路板以無線網路方式傳到雲端,運用temboo傳送資料到Google試算表做呈現1

我的想法很簡單,拿Arduino Yún跟溫度感測器DHT11相連結2,抓取我研究室的室溫之後(為什麼要抓我研究室的溫度?ㄜ,不要問,很可怕。),透過temboo將資料傳送的Google文件上呈現,如此,我便可以遠端隨時查詢相關數據。下圖是整體結構的運作方式:

Arduino & Temboo: How It Works, via https://temboo.com/arduino/yun/yun-and-temboo

關於Arduino Yún的基本設定,大家可以參閱網路上諸多前輩的文章,像是:葉難的Arduino Yún:基本設定與無線燒錄,這就不贅述了。而當Arduino Yún初始化完成,我們還需要有Google的帳號,Temboo的帳號,並且在Google上面新開一個試算表,還要使用Temboo取得Google的OAuth認證,這也都不贅述,可以參閱:CAVEDU專業技術教學團隊, 物聯網裝置連線社群網站_使用Temboo取得Google的OAuth認證

這一切的一切都完成了之後,我很高興地看到我的Google試算表,終於出現了時間與溫度數值。接著,我把Arduino Yún從電腦拔除,在研究室找了個地方,拿了USB充電器透過micro-USB給電給Arduino Yún,期待它獨立作業,卻發現我的試算表不再更新了。

Google試算表呈時間與溫度數值

我一直在思考,為什麼插電腦USB就可以,而給充電器的電就不行?是因為電腦送訊號來控制Arduino Yún才能工作嘛?不可能,我的原始碼基本上就是要Arduino Yún獨立透過網路傳送資料,插在電腦上充其量只是給電以及上傳程式碼而已。於是我思考,有沒有可能是充電器給電不足的問題,我檢查了Arduino Yún官方網頁3,對於電源提供僅只有不要超過5V,而且也是建議從micro-USB給電

The Yún has a number of different physical characteristics and connectors than the Leonardo. There is an on-board SD slot, Ethernet jack, and a USB-A Host connector. There is no power barrel connector on the Yún; it can be powered from the micro-USB connector.

There is no built in 5V regulator. If you power your Yún with more than 5V, you will likely damage it. If you are not powering the Yún from the micro-USB connection, you can apply power to the VIN and 5V pins on the board. If using the VIN pin, you cannot provide more than 5V, it will damage your board. It is recommended to power the Yún from the USB connection whenever possible.

Differences from the Arduino Leonardo, via https://www.arduino.cc/en/Guide/ArduinoYunLin

後來我發現到一件事,好像我得打開serial monitor,作業才會進行。所以我天真地又把 Arduino Yún從電腦拔除,獨立給電,並透過網路IP方式與電路板連結(如下圖),試圖以網路方式查看serial monitor。

從選單「工具-序列埠(Tools-Port)」看到含有IP位址的Yún, via 葉難 Arduino Yún:基本設定與無線燒錄http://yehnan.blogspot.tw/2013/10/arduino-yun.html

但是!等我一打開serial monitor,卻發現上面顯示:
Unable to connect: retrying (1)…
Unable to connect: retrying (2)…
Unable to connect: retrying (3)…
Unable to connect: retrying (4)…
Unable to connect: is the sketch using the bridge?
我查了一下資料,發現我的程式碼其實不支援在這種狀況下的序列傳輸,因此會顯示錯誤,關於這問題可以參閱:Unable to connect: is the sketch using the bridge?

其實答案已經呼之欲出,但我實在想太多而無法察覺,直到我看了這篇論壇討論:Topic: [Solved] Yun WiFi Problem4,原來有人也跟我有一樣的問題,他也是卡在認為Arduino Yún無法獨立作業,但是好像又跟序列埠輸出有點關係。原來我使用的原始碼是來自Temboo的官方教學5,其中在setup的部份:

void setup() {

// for debugging, wait until a serial console is connected
Serial.begin(9600);
delay(4000);
while(!Serial);

Serial.print(“Initializing the bridge… “);
Bridge.begin();
Serial.println(“Done!\n”);
}

我們可以看到有這一句:while(!Serial);,這是什麼意思呢?這個論壇討論的:What does the line “while (! Serial);” do in an Arduino program?,有人回答是:Adding that line makes the board pause until you open the serial port, so you get to see that initial bit of data. 原來如此,難怪我得連接電腦,並且還得把serial monitor打開,程式才會運作,我趕緊先把這行註解掉,Arduino Yún果然能夠獨立運作了!


  1. 請參閱Save Arduino Yún data to a spreadsheet, 或是CAVEDU專業技術教學團隊, 簡介 Temboo 的 IoT 模式 – 支援 Arduino / Arduino Yun / Samsung ARTIK 與 TI LaunchPad
  2. DHT11使用方式可參閱:Ming’s Blogger, Arduino範例19:利用DHT11抓取溫度和濕度
  3. 請參閱Getting Started with the Arduino Yún LininoOS
  4. 請見Arduino Forum > Products > Arduino Yún http://forum.arduino.cc/index.php?topic=254718.0
  5. 請參閱Save Arduino Yún data to a spreadsheet, WRITE THE SKETCH部份