2016年6月27日 星期一

紅外線接收模組

如果使用的是紅外線接收模組,規格參考如下:

  • Supply Voltage: 2.7V to 5.5V
  • Supply Current : 1.5mA
  • Operating Temperature: -25°C to 85°C
  • Frequency: 37.9KHZ
  • Receiving Angle: 90°
  • Receiving Distance: 18m
接腳為:
  • - 或 G : GND
  • S 或 Y : Signal
  • 剩下的接腳 : VCC
如果是這個:

程式碼如下:

#include <IRremote.h>
int RECV_PIN = 2;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
}
void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX);
irrecv.resume(); // Receive the next value
delay(200);
}

2016年6月22日 星期三

HC-05 的 AT 指令

  1. AT+VERSION : 查詢版本(Key 腳位要 High 一次)
  2. AT+ORGL : 回復預設值(Key 腳位要 High 一次)
  3. AT+ADDR? : 查詢藍芽位址(Key 腳位要 High 一次)
  4. 藍芽位址表示方式 NAP : UAP : LAP
    例如 : 如果是 12:34:56:ab:cd:ef 會表示為 1234:56:abcdef
  5. AT+NAME? : 查詢名稱(Key 腳位要一直 High)
  6. AT+NAME=名稱 : 設定名稱(Key 腳位要一直 High)
  7. 例如 : AT+NAME=hc-05\r\n
  8. AT+ROLE? : 查詢模組角色(Key 腳位要 High 一次)
  9. AT+ROLE=N : 修改模組角色(Key 腳位要 High 一次)
  10. N有以下三種值
    0 代表被動模式,一般情況採用此模式
    1 代表主動模式,用在要主動連接其他模組時
    2 代表回歸測試模式,用在要測試主動與被動端通訊是否正常時,會將從主動端收到的訊息原封不動送回
  11. AT+PSWD? : 查詢密碼(Key 腳位要 High 一次)
  12. AT+PSWD=密碼 : 修改密碼(Key 腳位要 High 一次)
  13. AT+UART? : 查詢串列介面(Key 腳位要 High 一次)
  14. AT+UART=X,Y,Z : 修改串列介面(Key 腳位要 High 一次)
  15. X (鮑率)可以是 4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600, 1382400
    Y (停止位元)可以是 0(表示 1 bit), 1(表示 2 bits)
    Z (同位元檢查)可以是 0(表示無), 1(表示 Odd parity), 2(表示 Even parity)

以上應該要執行的為 :

AT+ADDR?\r\n (查位址,連接用)
AT+NAME?\r\n (查名稱,連接用)
AT+PSWD?\r\n (查密碼,連接用)
AT+ROLE=0\r\n (設定為被動連接模式)
AT+UART=9600,0,0\r\n (設定串列介面)

2016年6月21日 星期二

進入 Xbee shield HC-05 藍芽模組的 AT 模式

一開始想要做藍芽實驗時,以為買了 Xbee shield + HC-05 在接線上會比較容易而省下不少時間,但...其實好像不見得是這樣,因為能找到的說明反而少,多花了許多時間在找資料。不過既然買了,就還是要進行的呀...

我買的 shield 是這樣:

框框中的兩個 jumps 正常的位置是「兩個同時」在 XBEE 那一邊,圖中是為了要進入 HC-05 的 AT 模式時才把「兩個同時」調到 USB 那一邊。

背面的電路圖:


正面的電路圖:


XBee HC-05 的長像:


XBee HC-05 的相關資料:


會用到的是第 1、2、3、10 以及 20 支腳,
而觀察電路圖就會發現,
第 1、10 支腳已經連接 VCC 及 GND (這不是當然的嗎?),
第 2、3 支腳已分別連接 Arduino 的 RX 與 TX,
最後的問題是第 20 支腳要連到 VCC (才會進入 AT 模式),
可是在不動用焊接工具的情況之下,
要怎麼達成這個目標呢?

這時,平常束電線用的束線條就派上用場了!

把束線條的兩端撥掉一點皮,露出適當長度的金屬,就可以用來連接第 1 支腳 (VCC) 和第 20 支腳 (Key) 了 (因為束線條的金屬粗細適當很合用) 。

再接下來要讓 Arduino 的 MCU 停留在 reset 模式,就可以直接當作 USB to TTL 轉換器,拿來修改 HC-05 的設定。

其實只要一條電線把 Arduino 的 RESET 和 GND 接起來就可以了。

再來就是把以上的東西合體 ( Arduino + XBee shield + XBee HC-05 )



把 Arduino 和電腦接起來後,可以發現 HC-05 的紅色 LED 燈閃得有點慢,這樣就成功的進入了 AT 模式 ( 如果閃得很快就代表沒有進入 AT 模式 )。
另外,因為 MCU 並沒有工作,所以無須上傳任何程式到 Arduino。

2016年6月20日 星期一

ESP 8266 的 AT 指令

  1. AT+UART_DEF=9600,8,1,0,0 : 更改 Baud rate 為9600
  2. AT+CIFSR : 查詢 IP 位址
  3. AT+CWMODE? : 查詢目前工作模式
  4. AT+CWMODE=1 : 修改工作模式為 1 (STA) 網卡模式、 2 (AP 基地台模式)、 3 (AP+STA)

絕對不要使用 AT+IPR 指令,為了這個有問題的指令,我重燒了十幾次的軔體 (因為一但下了這個指令,ESP 8266 就無法溝通了)。

執行 ESP 8266 AT 指令的前置工作

要執行 ESP 8266 AT 指令,使用 RealTerm 比較方便

RealTerm 下載網址:
https://sourceforge.net/projects/realterm/

RealTerm 執行時選擇以系統管理身分執行比較不會發生問題:
  • Display 設定如下(勾選 Ansi 才不會看一些奇怪的符號)


  • Port 設定如下
    • 鮑率要選對,選錯就會呈現亂碼或沒反應,一般預設值(或軔體剛更新完)可能是115200
    • Port指的是Com Port
    • 每次更改完都要按一次「Change」,然後核對下方顯示的是否正確

  • Send 設定如下
    • CR、LF、CR、LF 都要勾選
    • 在中間輸入「AT」後按下「Send ASCII」,如果正常的話,就會在上面看到OK
    • 如果沒有出現 OK 的話,請檢查右方的「Status」,在按下「Send ASCII」時 RXD 和 TXD 是否同時亮起來,如果只亮一個,表示電路是有問題,或是設定的 Buad rate 錯誤


只要讓 Arduino 的 MCU 停留在 reset 模式,就可以直接當作 USB to TTL 轉換器,拿來修改 ESP 8266 的設定。

其實只要一條電線把 Arduino 的 RESET 和 GND 接起來就可以了。

再來參考 ESP 8266 的腳位資料:

要把 GND 接到 Arduino 的 GND
TXD 接到 Arduino 的 RX
RXD 接到 Arduino 的 TX
VCC 和 CH_PD 接到 Arduino 的 3.3V (要利用麵包板或其他連接方式,因為 3.3V 只有一個插孔)
電路接好後,再把 Arduino 和電腦接起來,就可以進行設定了。

如果使用 USB to TTL 來設定的話,接法也是一樣,
只是把上面的 Arduino 換成 USB to TTL 而已。

FT232R USB UART 驅動程式下載網址:
http://www.usb-drivers.org/wp-content/uploads/2014/12/CDM-2.08.28-WHQL-Certified1.zip

2016年6月19日 星期日

用 Arduino 來更新 ESP 8266 軔體

花了三天的時間,找了許多的資料,終於把 ESP 8266 軔體更新給搞定。

ESP 8266 的腳位資訊可以參考這個圖:


Arduino 用來變更 ESP 8266 模式的程式碼是:
     int ch_pd = 3;
     int io0 = 2;

     void setup() {
       pinMode(ch_pd, OUTPUT);
       pinMode(io0, OUTPUT);
       digitalWrite(io0,LOW);
       digitalWrite(ch_pd, LOW);
       delay(1000);
       digitalWrite(ch_pd, HIGH);
     }

     void loop()
     {
      
     }

Arduino 與 ESP 8266 連接的電路要參考這個圖:


ESP 8266 的軔體連結:
http://wiki.ai-thinker.com/esp8266/sdk

ESP 8266 的燒錄程式連結:
http://bbs.espressif.com/download/file.php?id=856

燒錄步驟:

  1. 先將 Arduino 程式上傳到 Arduino Uno
  2. 將 ESP 8266 與 Arduino Uno 連接
  3. 將 Arduino Uno 接上電腦(接上電腦後 Arduino 會執行程式將 ESP 8266 變更為寫入模式)
  4. 開啟 ESP 8266 燒錄程式(ESP FLASH DOWNLOAD TOOL)

  • 勾選 SpiAutoSet,其他 SPI 的相關設定就不必管了
  • 選好連接的 COM PORT,以及 BAUDRATE,如果 BAUDRATE 沒改過,預設可能會是115200
  • 因為要從0x00000開始燒錄,所以勾選第二行,然後檔案選AiThinker_ESP8266_DIO_8M_8M_20160615_V1.5.4.bin
  • 再來按下 START,慢慢等燒錄到 100%,就成功了

備註:
  • ESP 8266 上亮紅燈代表電源已連接,亮藍燈代表線路連接有問題,正常狀態下只亮紅燈
  • ESP 8266 燒錄程式在不選任何任何軔體的狀態下按「START」,如果連接狀態正常沒有出現錯誤的話,程式會自動檢測出一些資訊,如下圖

2016年6月15日 星期三