顯示具有 C# 標籤的文章。 顯示所有文章
顯示具有 C# 標籤的文章。 顯示所有文章

2012年7月11日 星期三

C# and Arduino over Bluetooth

在 "Talk with Arduino using C# and Firmata" 一文中,我們提到如何利用 Firmata.NET 跟 Arduino 建立通訊。當時PC 是通過 COM 連接埠跟 Arduino通訊 (也就是用 USB cable 連接 Arduino 與 PC),這次我們將改用藍芽讓 C# 程式與 Arduino 建立通訊。底下以 HC-0x 藍芽模組為例說明:

1) 確定藍芽模組 baud rate 為 57600 bps。藍芽模組 baud rate 設定方法請參考 "Bluetooth module configuration", "Config bluetooth baud rate w/ Arduino" 或 "Arduino as an USB to TTL adapter"

2) 上傳 StandardFirmata 到 Arduino:打開 Arduino IDE,點選 File > Examples > Firmata > StandardFirmata,把程式上傳到 Arduino 板子上,切記在上傳程式的時候不要接藍芽模組,不然可能會影響上傳程序。

連接 Arduino 與藍芽模組

把 Arduino 5V  接到藍芽模組的 VCC,而 GND 接到 GND:

image_thumb1

有兩點要注意:第一是電源千萬不可接錯,不然可能會把藍芽模組燒壞,第二是 Arduino 的 RXD 要接藍芽模組的 TXD,而 Arduino 的 TXD 要接藍芽模組的 RXD。可參考下表:

Arduino 藍芽模組 備註
5V VCC 注意電源不可接錯
GND GND 注意電源不可接錯
RXD TXD  
TXD RXD  

通電之後,藍芽模組上的 LED 會一直閃爍:

image_thumb133

執行 C# Example

參考 "Loop back test" 一文建立電腦跟藍芽模組之間的配對,並且記住配對完成之後的藍芽連接埠號碼,本例用的是 COM21。

下載 C# 範例程式,打開 Blink 範例。選好 Serial Port (本例為 COM21),按下 Open 鈕:

2012-05-06 23h56_55

順利的話,Arduino 板子上的 LED 燈就會不斷地閃爍,亮一秒,滅一秒,如此循環不已:

image
▲ pin 13 上的 LED (L)

如果你有興趣,可以進一步參考 "Talk with Arduino using C# and Firmata" 一文,然後試一試 AnalogRead 和 Fade 這兩個範例。

參考資料

2011年12月21日 星期三

Talk with Arduino using C# and Firmata

C# 也可以用 Firmata 協定跟 Arduino 通訊,方法是用 Firmata.NET 這個套件。

要讓微控制器 (Microcontroller) 跟電腦建立對話,通常使用者會花很多時間在處理通訊方面的問題。用 Firmata.NET 寫 C# 程式,最大的好處就是使用者不必煩惱通訊的繁瑣細節,而且程式風格跟寫 Arduino 的程式幾乎是一致的。

由於涉及 Arduino 與電腦兩端的程式,所以問題分成兩個部份:

  1. Arduino 端: 這部份很簡單,因為 Arduino IDE 已內建 Firmata,所以只要上傳 StandardFirmata 程式到 Arduino 板子上就可以了。使用者完全不需要寫 Arduino 的程式。
  2. PC 端: 這部份便是使用 Firmat.NET 與 C# 撰寫程式。
上傳 StandardFirmata 到 Arduino

打開 Arduino IDE,點選 File > Examples > Firmata > StandardFirmata 並將程式上傳到 Arduino 板子上:

image
▲ Arduino IDE

注意一件事,StandardFirmata 這支 Arduino 程式所用的序列通訊速率是 57600 bps,所以當你在寫 PC 端的程式在開啟 Serial port 時,記得也要把通訊速率設成 57600 bps,這樣 Arduino 跟 PC 的程式兩邊才能溝通。

image

2011年12月20日 星期二

C# Serial Port Communication #2

我們在前一篇已經學會如何列出電腦上所有的 serial ports,接下來我們將學習 serial port 的使用方法,也就是怎麼開啟以及讀寫 serial port。

Open, Read, Write, Close

在開啟 serial port 之前,必須先設定 serial port。例如,假如你要用 COM5, 通訊設定使用 9600 的速率 (baud), 沒有 parity bit, 每個位元組為 8 個 data bits 加上 1 個 stop bit,那麼就要這樣設定 serial port:

設定好 serial port 後,接著就可以呼叫 SerialPort 物件的 Open() method 打開 serial port。為了預防意外,例如 「serial port 不存在」或是「serial port 已經被其它程式開啟了」等這些狀況,通常我們會把程式碼寫在 try … catch 區塊裏:

打開 serial port 之後,之後便可以用 ReadXXX, WriteXXX 之類的 methods 來讀寫 serial port,這部份後面將以實例介紹。最後,當你不需要使用 serial port 的時候,最好呼叫 Close() method 關閉 serial port 以免佔著資源:

C# Serial Port Communication #1

如果你有在玩電子或內嵌系統 (Embedded System),你會常常碰到需要讓電子設備跟電腦對話的情況,最簡單的通訊方式是使用 serial port。

這篇教學將告訴你怎麼用 C# 撰寫可以透過 serial port 跟電子設備通訊的程式。

System.IO.Ports namespace

在 C#,所有跟 serial port 通訊有關的類別都定義在 System.IO.Ports 這個 namespace,所以第一件事是引用 System.IO.Ports 這個 namespace:

列出所有的 Serial Ports

要怎麼知道你電腦上面有哪些 serial ports 可用呢?方法是用 SerialPort 的 GetPortNames() 這個 static method。所以,在跑完底下這行程式碼後:

所有 serial ports 的名稱都會被放到 serialPorts 這個字串陣列裏。

我們可以跑個簡單的迴圈把它印到 Console:

下圖是 ListPorts-Console 範例程式的執行結果:

image
▲ 下載範例程式:ListPorts-Console

假如是 GUI 介面的程式,可以像底下這樣用個簡單的迴圈把所有 serial ports 填到 ComboBox 裏:

上列最後兩行會選擇第一個可用的 serial port,假如電腦上有 serial port 的話。

把所有 serial ports 填到 ComboBox 裏有個更簡單的方法:

這種寫法只要一行程式就搞定,連迴圈都不用寫。

下圖是 ListPorts-GUI 範例程式的執行結果:

image
▲ 下載範例程式:ListPorts-GUI

參考資料