2015年8月6日 星期四

用 MOFFET 2N7000 做 5V 與 3.3V 位準轉換

做完 DHT11 的基本測試後, 下一步便是如何將溫濕度資料放到物聯網伺服器 Thingspeak 上, 參考 :

# 初遇 IoT ( Internet of Thing, 物聯網 ) - 使用 Arduino 控制 ESP8266 無線模組

但是在連上 WiFi 之前還有一個工作要完成 : 5V-3.3V 位準轉換.  Arduino 一般工作在 5V, 它的 TX/RX 接腳不能直接與 ESP8266 的 TX/RX 相連, 否則可能會使 ESP8266 燒毀. 雖然我的 Arduino Pro Mini 可以在 3.3V 工作, 但考量 DHT11 或 PIR 感測器都是 5V 運作的, 所以還是做個 5V-3.3V 位準轉換器來介接好了.

露天有現成的位準轉換板, 價格為 $72, 參考 :

# 四通道雙向邏輯電壓準位(適用1.8V,2.8V,3.3V,5.0V )轉換模組(支援 I2C, SPI, 一般邏輯準位) $72

此板使用 N 通道 MOSFET (金氧半場效應電晶體) BSS138 作為開關, 我是用昨天向 ic_shopping 買的 2N7000 來做, 參考 :

# 使用 N-Channel MOSFET 做 I2C 電壓準位轉換電路

icshopping 5 顆賣 11 元, 平均一顆不到 3 元, 還蠻便宜的 :

# 2N7000 (TO-92) N通道 60V 400mA 1.2Ω MOSFET場效管(現貨) $3
# 2N7000 TO-92 N-Channel $8
# 《icshopping_com》2N7000TA TO-92 (5pcs) $11

2N7000  接腳如下圖, 從正面 (平面) 看, 最左邊是源極 (Source), 中間是閘極 (Gate), 最右邊是汲極 (Drain) :


位準轉換器的電路圖如下, 為了麵包板佈線方便, 我把電源方向調換了, 但 2N7000 是雙向開關, 所以功能不變. 右邊是單一通道的電路圖 (我是用 SchemeIt 畫的), 左邊是使用兩個 2N7000 與四個 4.7K 上拉電阻依右側線路圖連接而成的兩通道的位準轉換器, 上方是 5V 電源, 下方是 3.3V 電源, 2N7000 左右兩個接腳就是信號輸出入端 (VL 為 3.3V 低壓端, VH 為 5V 高壓端) :


學校電子學教過 MOSFET 的原理, 但印象已不深. 搜尋了網路資料溫習一下, 其實此電路原理很簡單. 當 VL=3.3V 時, FET 的 G 與 S 極都是 3.3V, 所以不會感應出 N 通道, 亦即電晶體不導通, VH 輸出 5V; 當 VL=0V 時, FET 的 S 極接地, 而 G 極為 3.3V, 會感應出 N 通道, FET 導通, 所以 D 極相當於與 S 極接在一起, 變成 0V, 反之若將 VH 當輸入, 當 VH=5V 時, D 極為 5V, G 極為 3.3V, 逆電壓造成 N 通道無法建立, FET 不導通, 所以 VL 會輸出 3.3V; 當 VH=0V 時, G 與 D 極之間為 3.3V 正壓差, 會感應出 N 通道使 S-D 導通, VL 輸出 0V.


分別將 VL 與 VH 當輸入, 接 0/3.3V 或 0/5V, 測量結果與理論相符, 證實此乃雙向的 I2C 電壓位準轉換器. 注意喔, 2N7000 的源極 S 要接低壓 3.3V 側, 而汲極 D 應接高壓 5V 側, 參考 :

# 使用 N-Channel MOSFET 做 I2C 電壓準位轉換電路

其實 5V-3.3V 位準轉換器也可以使用 74LVC245 晶片 (8 通道), 不過單價較高, 例如 Proteus 的賣場一顆是 52 元 :

# 74LVC245 - 八通道邏輯 ( 3V3, 5V ) 電壓準位轉換晶片 $52

此晶片提供 8 通道位準轉換, 而 Arduino 與 ESP8266 連接時只需要將 RX, TX 兩條線轉成 3.3V 準位而已, 所以使用一顆 74LVC245 似乎有點浪費. 還有一顆 74HC4050D 可代替 74LVC245, 比較便宜 NT$13, 但只有 SMD 封裝 (參考) :

# 《icshopping_com》74HC4050D $13

以上都是雙向電平轉換, 如果只是單向, 也可以用光耦合來做, 參考 :

# Simplest uni-directional level shifter (3.3V -> 5V)

可以使用 PC817/EL817/FL817 IC :

# PC817 DIP4 光耦合電晶體 光耦合IC 隔離控制 EL817 FL817 $2

20151003 補充 :

參考 :

# 2 cent TTL Level Shifter - connect a 3.3V Pi to 5V TTL serial device or Arduino and more...

20160815 補充 :

今天在 Youtube 看到有人用 TI 的 CD5060 這顆緩衝器 IC 來做 5/3.3 位準轉換 :

# https://www.youtube.com/watch?v=qU76yWHeQuw


# **東順網路** TEXAS IC CD4050BE $10

2017-04-27 補充 :

也有貼片式的 2N7002, 參考 :

# 2N7002 VISHAY SOT-23(10個)【3680105001354】電晶體.MOSFET $11


2020-06-13 補充:

感謝匿名網友留言, 關於 VH=0 時 MOS 導通是因為 BODY DIODE 的關係, 參考 :

# http://140.120.11.1/semicond/handout/chap4.pdf


2015年8月5日 星期三

向 ICSHOPING 購買電子材料一批

最近因為要進行 ESP8266 測試, 需要 2N7000  MOSFET 做位準轉換, 另外太陽能板並聯實驗也需要防止逆電流的二極體 FR207 等, 所以向附近的 icshpping 購買電子材料一批 :

# 《icshopping_com》FR207 2A/1000V (5pcs) 快速回復二極體 $11*2=22
# 《icshopping_com》2N7000TA TO-92 (5pcs) FSC $11*2=22
# 《icshopping_com》排針 1*14 12M/M(4pcs) 排針 1*14 12M/M(4pcs) $6*5=30
# 《icshopping_com》排針 1*4 12M/M (10pcs) 排針 1*4 12M/M (10pcs) $6*2=12

合計 86 元


第 32 周記事

週日中午要做冬瓜封, 跑去菜園找這顆最早結果的, 體型比較碩大, 但是一翻開才發現底下貼地部分竟然是紅螞蟻的窩, 密密麻麻跑來跑去, 甚是嚇人. 我就讓他們自謀生路, 回去廚房準備晚餐的湯. 過了半小時再去看, 已經幾乎全部撤離, 這才搬去清洗.


搬回屋內一稱, 重達 17 斤, 沒想到才三個月, 冬瓜竟然能長這麼大. 但比起媽去年收成的卻要小得多了 :


週三收到購買的 10W 太陽能板 ($429) 與充電控制器 ($259), 當晚放在書桌上, 以室內 LED 燈光照亮, 約有 9V 左右輸出; 週六下午 1 點左右拿到太陽下曝曬, 量得開路電壓 20.9V :


接上控制器後, 太陽能板輸出端降為 19.5V :



太陽能比風力要穩定, 只要沒下雨有陽光, 就能穩定供電. 這塊能板+控制器組合只是我初步實驗觀察的工具, 預定負載是 10W 內的 LED 燈, 作為夜間水圳邊照明或小水泵電源之用. 實驗成本 : 太陽能板 429 + 控制器 259 + 7.2AH 蓄電池 320 + 花線 179=1187 元.

本周收到二哥英檢初級成績, 聽力差兩分沒過, 真是可惜. 必須再報 10 月的加考.


2015年8月4日 星期二

Arduino 溫濕度感測器 DHT11 測試

今年三月底跟露天賣家盼盼 (ccdogccdogkimo) 採購了一批模組零件, 其中包含了一顆 DHT11 溫溼度模組, 最近為了測試 ESP8266 重看了 Proteus 的大作 :

# 初遇 IoT ( Internet of Thing, 物聯網 ) - 使用 Arduino 控制 ESP8266 無線模組上傳資料到 IoT Server ( ThingSpeak )

於是找出這個模組來測試一翻, 主要目的是要觀察 ESP8266 與開源物聯網伺服器 ThingSpeak 的互動.

市面上溫度感測器有多款, 像 "Prototyping Lab (Make 出版, p145)" 與 "Arduino Cookbook (Arduino 錦囊妙計 6.8 節)" 使用的都是 LM35, 外觀長得像電晶體, 約 30 元左右 :

# LM35DZ Temperature Sensor TO92 溫度感測器 傳感器 /Arduino/8051 $30
# 全新現貨 LM35DZ 這才是真的 TO92 溫度感測器 溫度傳感器 $32

LM35 是壓變式類比溫度感測器, 其電壓輸出與溫度呈線性關係, 攝氏 0 度時輸出 0mV, 每增加一度輸出增加 10mV, 準確度為攝氏正負 0.25度, 感測範圍攝氏 -55~150 度, 參考 :

# 溫度感測器LM35介紹
# TI LM35 溫度感測 IC 規格 (PDF)

第二個是 DS18B20 溫度感測晶片, 感測範圍 -55~125 度, 此款是數位型感測器, 可並聯實現多點測量, 價位也是 30 元左右 :

# DS18B20溫度感測器 DS18B20 18B20 單片機 18b20溫度採集 $23
# blkbox.me嚴選 DALLAS DS18B20 TO92 數位高精度溫度感測器 $26
# 原廠 Dallas DS18B20 溫度感測器 $30
# DS18B20 數位溫度器感測器 TO-92 全新原裝 $46
# 1米 不鏽鋼封裝防水型 DS18B20 溫度感測器 溫度傳感器 /8051/Arduino $60

而 "Arduino 互動設計入門 (旗標, 趙英傑)" 這本則介紹最常見的 DHT11 溫溼度感測模組 (9-2 節), 它也是數位式輸出, 溫度量測範圍 0~50 度, 精確度正負 2 度, 而濕度範圍 20~80%, 精確度正負 5%, 此款約 30 元左右 :

# DHT11 溫度 濕度 傳感器奧松 AOSONG DHT-11 溫濕度環境監控模組Arduino專用 $27

DHT11 結合溫度與濕度晶片於一體, 其正面有網孔讓感測 IC 能測量溫溼度. 四個接腳中第二腳是資料輸出 (接 Arduino 數位接腳), 第三腳用不到, 第一腳與第四腳是 VCC 與 GND, 要注意, 接反可能會燒毀模組. "Arduino 互動設計入門 (旗標, 趙英傑)" 這本書上建議在 VCC 與 Data 腳之間跨接一個 10K 電阻 (顏色是棕黑橙); VCC 腳接一個 0.1uF (104) 電容到 GND.
Importing parts?DHT11 Humitidy and Temperature Sensor.fzpz

首先到 Adafruit 網站下載 DHT11 的函式庫, 按網頁右下角的 "Download ZIP" 即可下載 :

http://github.com/adafruit/DHT-sensor-library

解開壓縮檔後將整個 DHT-sensor-library-master 資料夾放到 Arduino IDE 的 library 目錄下, 例如 :

D:\arduino-1.6.1\libraries\DHT-sensor-library-master

打開 Arduino IDE, 在 "檔案/範例" 下就可以看到 DHT Sensor library 了 :


我載入 DHTtester 這個範例, 加以修改刪除不需要的程式碼後如下 :

#include "DHT.h"
#define DHTPIN 2   
#define DHTTYPE DHT11  

DHT dht(DHTPIN, DHTTYPE); // Initialize DHT sensor

void setup() {
  Serial.begin(9600);
  Serial.println("DHT11 test!");
  dht.begin();
  }

void loop() {
  delay(2000);
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  float f = dht.readTemperature(true);
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
    }
  Serial.print("Humidity: ");
  Serial.print(h);
  Serial.print("%\t");
  Serial.print("Temperature: ");
  Serial.print(t);
  Serial.print("*C\t");
  Serial.print(f);
  Serial.print("*F\n");
  }

此處我是將 DHT 的 Data 腳接到 Arduino ProMini 的腳 2, 編譯上傳後, 開啟序列埠監控視窗, 即可看到 DHT 輸出的溫溼度 :

Humidity: 64.00%    Temperature: 29.00*C    84.20*F
Humidity: 65.00%    Temperature: 30.00*C    86.00*F
Humidity: 64.00%    Temperature: 29.00*C    84.20*F
Humidity: 64.00%    Temperature: 29.00*C    84.20*F
Humidity: 65.00%    Temperature: 29.00*C    84.20*F
Humidity: 64.00%    Temperature: 29.00*C    84.20*F
Humidity: 64.00%    Temperature: 29.00*C    84.20*F
Humidity: 64.00%    Temperature: 29.00*C    84.20*F
Humidity: 64.00%    Temperature: 29.00*C    84.20*F
Humidity: 67.00%    Temperature: 30.00*C    86.00*F
Humidity: 67.00%    Temperature: 29.00*C    84.20*F
Humidity: 69.00%    Temperature: 29.00*C    84.20*F
Humidity: 71.00%    Temperature: 30.00*C    86.00*F
Humidity: 70.00%    Temperature: 30.00*C    86.00*F
Humidity: 69.00%    Temperature: 29.00*C    84.20*F
Humidity: 68.00%    Temperature: 30.00*C    86.00*F
Humidity: 67.00%    Temperature: 29.00*C    84.20*F
Humidity: 67.00%    Temperature: 29.00*C    84.20*F
Humidity: 66.00%    Temperature: 30.00*C    86.00*F
Humidity: 66.00%    Temperature: 29.00*C    84.20*F
Humidity: 66.00%    Temperature: 29.00*C    84.20*F
Humidity: 66.00%    Temperature: 29.00*C    84.20*F
Humidity: 65.00%    Temperature: 29.00*C    84.20*F
Humidity: 65.00%    Temperature: 30.00*C    86.00*F
Humidity: 65.00%    Temperature: 29.00*C    84.20*F

所以看起來 DHT11 的準確度似乎不是很高, 擺動是 1 度與 1% (中間起伏較大是因為我對著 DHT11 吹氣的緣故). 其實 Adfruit 還有精確度較高的溫溼度模組 DHT22 與 AM2320, 但價格較高 :

# DHT22 AM2302 電容式 數位溫濕度感測器 高精度穩定可靠 取代SHT11 SHT15 $165
# 《iCshop1》AM2320 高精度數字溫濕度傳感器 $95

參考 :

http://ruten-proteus.blogspot.tw/2014/11/internet-of-thing-arduino-esp8266.html
Using an Arduino + Ethernet Shield to Update a ThingSpeak Channel


2015年8月2日 星期日

台灣必須廢核的十個理由

每次講到廢核反核, 坐在我左邊的同事就會不以為然, "沒這麼容易啦", "漲電費你接受嗎?", "影響經濟", . 我的回答是 :
  1. 排除利益團體就容易了.
  2. 台灣電費超便宜.
  3. 八年來三座核電都持續運轉, 經濟有比較好嗎? 
其實這些反核理由都不夠力. 務必廢核的唯一理由是, 台灣太小, 承受不起一次核災. 連半次都不行.

今天在圖書館架上看到這本劉黎兒寫的 "台灣必須廢核的十個理由", 本來只想隨便翻一翻, 但卻一直翻下去, 幾乎看完了. 心得 : 台灣必須積極發展綠能, 三座核電廠必須及早廢爐.
為什麼? 我只列出三項 :
  1. 台灣是全世界唯一把核電廠蓋在首都圈的國家.
    核一核二都在台北市 30 公里範圍內. 核三在高雄 80 公里範圍內. 福島核災後, 30 公里內宛如死城, 撤離人數超過 17 萬人. 100 公里內仍為輻射汙染管制區不宜居住, 其實整個福島縣輻射都已超標, 屬於管制層級, 不能住人了, 但受影響人數超過 200 萬, 要撤離安置這麼多人已超出日本政府能力, 所以只好修改法定標準, 繼續居住 .... 而台北首都圈人口超過 500 萬!  
  2. 高階核廢料已經擠爆核電廠燃料池
    受限於巴塞爾協定, 用過的燃料棒無法儲存於別國, 只好自己處理. 台灣核電廠運轉到現在已累積超過 15000 支廢燃料棒, 每年增加 150 支以上, 全部放在核電廠區內, 燃料池已經不夠放, 如果延役繼續運轉下去, 要放哪裡? 
  3. 核電廠停役拆爐成本是建廠的兩倍
    一般電廠有聽說要停役的嗎? 核電廠就要. 而且要拆除核電廠設施與處理核廢料需要數十年! 拆除預算是建爐的兩倍! 核電不是能輕易玩得東西, 後端成本非常昂貴! 例如日本第一座商轉的東海反應爐拆爐已進行 12 年, 預估還要 9 年. 這樣還敢說核電是便宜的能源嗎? 
高階核廢料都是鈾 235 燃燒後的劇毒鈽 239, 半衰期 24000 年, 即使十萬年後毒性仍有十分之一, 這是我們要留給子孫的禮物嗎?  舊石器時代的克羅馬儂人距今 30000 年, 如果他們當時就發展出核技術, 那麼三萬年後的現在, 我們還在享用這些核廢料二分之一的 "輻澤" 呢 !

有個迷思是, 核廢料主要成分不是核武原料鈽 239 嗎? 是不是能夠用來製造核武? 答案是, 別肖想啦! 原因是輕水式反應爐產生的核廢料除了鈽 239 外, 還有 20% 不穩定的鈽 240, 而武器級的鈽原料中, 鈽 239 須達 90% 以上, 須使用所謂的黑鉛爐來提煉. 若使用核電廠的鈽廢料來製造核彈, 恐有提前爆炸之虞!

現在台灣最危險還不是反應爐本身, 而是那些放在擁擠燃料池裡的用過的燃料棒. 這些高階核廢料只要有異物掉落池中, 就可能使廢燃料棒破損而產生核反應, 爐心的燃料棒還有圍阻體等保護; 而這些廢燃料棒卻沒有!

核電根本就是最髒的能源, 但卻被核電幫包裝宣傳為乾淨能源, 真是豈有此理! 台灣一旦發生核災, 北部人口必須遷至南投復興鄉以南; 南部人口須遷至台南新營區以北的安全區, 以避免核輻射汙染, 屆時我們可能得遷都台中啦!

# 福島出現「異形花」 疑受輻射影響


2015年7月29日 星期三

好書 : Arduino 自作專案大百科

今天在明儀看到 Cavedu 翻譯自 "Arduino Projects Handbook" 的新書 "Arduino自作專案大百科", 用塑膠紙封起來, 無法翻閱內容, 所以當下沒買, 回來查網路看看圖書館有沒有, 唉, 新書怎會有呢?

# [新翻譯書準備出版] Arduino 自作專案大百科

原文版網站 :

# https://arduinohandbook.wordpress.com/


書中用到的函式庫可由下列 url 下載 :

# https://arduinohandbook.wordpress.com/libraries-2/

下載 45 個專案的範例程式可從網頁上方的 Projects1-15, Projects 16-30, ... 等下載.

或者到碁峰網站有 ZIP 檔 :

# http://books.gotop.com.tw/download/ACH017800

這本書第 36 章介紹 NOKIA 5110 液晶顯示器的用法, 不使用函式庫, 所以較能深入了解其操作方法.


2016-10-21 補充 :

今天在母校高應大圖書館借到這本書了, 啃食中 ...






★ ESP8266 WiFi 模組 AT command 測試

這是我今年四月以 $180 向露天賣家 XLAN 買的超小型 WiFi 模組 (現已降價為 $145), 採用上海樂鑫科技的 ESP8266 晶片, 板子型式是 ESP-01, 這是 Arduino 最經濟的 WiFi 方案, 因為目前買一塊內建 WiFi 的 Arduino Yun 至少都要 2200 元以上. 此款板子有拉出 ESP8260 的兩個 GPIO 埠, 對於只需要兩個輸出入埠以內的應用而言, 可以改燒錄 NodeMCU 韌體, 直接將 ESP-01 卡當作 MCU+WiFi 用, 採用 Lua 作為程式語言, 在簡單應用可取代 Arduino.

關於 ESP8266 與 NodeMCU 簡介參考 :

# ESP8266 WiFi 模組
# NodeMCU 物聯網開發平台
# 5美元的WiFi微控器ESP8266已可與Arduino相容

ESP8266 晶片實作 LWIP 的精簡型 TCP/IP 協定堆疊, 成本低效能高, 具有極佳競爭力. 如果是採用 TI 的 CC3000 構建的 WiFi 模組, 大約要 700 元以上 (CC3000 晶片就要 500 元左右) :

# 露天 : CC3000 WiFi IC 晶片 W10 $540
# 露天 : CC3000 Wifi Module for arduino (BB-CC3K) $695
# CC3000 WiFi Shield for Arduino R3 帶SD卡座 支持 MEGA2560 $950

而採用 W5100 的 WiFi 模組則比 CC3000 便宜些 :

# <微控科技> W5100 WIZnet 網路晶片 Arduino 8051 AVR ARM PIC 均可用 $185
# 2013最新版 Arduino Ethernet W5100 網路擴展板 板載mini SD 支持Mega328 $225
# 【方塊奇品】新款Arduino Ethernet Shield W5100 R3 附參考資料 網路擴展板 板載TF  $380
# W5100乙太網模塊 網絡模塊紅板 W5100乙太網模塊 電子積木 網絡 W42 (小板) $400

但是論價格, 論體積, CC3000 與 W5100 兩個都不是 ESP8266 的對手, 目前較便宜的 ESP-01 板子如下 :

# esp8266 esp-01 (含稅) $90
# ESP8266 ESP-01 串口 WIFI 無線模組 WIFI $145
# blkbox.me嚴選 ESP8266 大陸製ESP-01 Wifi 無線模組 arduino可用 $150
#《iCshop2》ESP8266 ESP-01 串口WIFI 無線模組 (陶瓷天線) $165
# blkbox.me原裝㊣品 虎紋風格 ESP8266 Wifi模組 板載8Mb FLASH (BB-E01) $185

ESP8266 可規劃作為 AP, STA, 或者是 AP+STA 雙模.

AP 模式 : Access Point 模式, 即無線基地台模式, 接受其他 WiFi 終端連入
STA 模式 : Station 模式, 即無線網卡模式, 可連接到 AP, 不接受連入
SSID : Service Set IDentifier, 無線區域網路的名稱, 可由 AP 廣播出來
LWIP 協定 : 精簡化後的 TCP/IP 協定堆疊, 適用於嵌入式系統

# ESP8266 晶片的規格書 (中文)
# ESP8266 晶片的規格書 (英文)

以下我參考克里斯與 Proteus 的文章, 利用 PL2303HX 下載線連接電腦的 USB 與 ESP8266 板, 使用 RealTerm 軟體以 AT 指令與 ESP8266 通訊 :

# 【技術教學】打造Wifi遙控車(之一):使用 ESP8266進行 Wifi無線通訊
# 【技術教學】打造Wifi遙控車(之二):整合 ESP8266 與 Arduino
# 如何燒錄 ESP8266 無線模組的韌體
# ESP8266 control from a PC via USB-serial

克里斯使用 CP2102 USB-UART(TTL) 轉換板來將電腦的 USB 訊號轉成 ESP8206 的 UART 串列訊號, 而我用的是 PL2303HX 下載線, 參考前作 :

# 安裝 PL2303HX USB 轉 TTL 驅動程式
# 關於 PL2303HX 在 win8 無法驅動的問題

此 PL2303HX 下載線電路板被包覆在 USB 塑膠殼內, 拆開來可看到裡面有 3.3V 電源接線孔, 若需要輸出 3.3V 電源需自行焊線拉出去, 但根據克里斯經驗, 因為 EXP8266 會消耗 200~300mA 左右的電流, 而一般下載線即使有 3.3V 電源輸出, 但無法輸出這麼多電流, 所以無法推動 ESP8266.

我查了 PL2303HX 規格, 在 9.2.1 節提到其最大操作電流是 25mA, 也是不夠的, 所以其 3.3V 輸出不能用 (故不須接出來了), 必須使用麵包板電源模組的 3.3V 電源, 如下圖右上角處, 把跳線帽移到 3.3V 處, 旁邊的接點就是輸出 3.3V 了 :


注意, 雖然 PL2303HX 吃電腦 USB 的 5V 電源, 其信號輸出卻是 3.3V 準位 (實際測量是 3.8V), 所以其 TX/RX 可以直接與 ESP8266 的 UXRD/UXTD 相接.




PL2303HX 有四條線, 其中紅色的 +5V 不能用 (因 ESP8266 工作電壓 1.7~3.6V) :

PL2303HX       
+5V(紅線)  - 不可接 (會讓 ESP8266 燒毀)
GND(黑線)-  接 ESP8266 與 3.3V 電源板的 GND (三個 GND 共接)
TXD(綠線) -  接 ESP8266 的 URXD
RXD(白線)-  接 ESP8266 的 UXTD

ESP8266 的接腳圖如下所示, 針腳位於背面, 接線時比較有用 :

正面

背面

連線圖如下, 可見 PL2303HX 與 ESP8266 的 GND 都接到電源模組的 GND (都是黑線), ESP8266 的 CH_PD (黃線) 與 VCC (紅線) 都接到電源模組的 3.3V, 然後 PL2303HX 的 RX (白線) 接 EXP8266 的 UXTD, TX(綠線) 接 ESP8266 的 URXD.


接好後把 PL2303HX 插入電腦 USB 槽, 按下電源模組按鈕送電, 這時 ESP8266 板子晶振旁的藍色 LED 會閃一下 (有資料傳送時藍燈閃, 參考 ESP8266), 邊邊的紅色 LED 也會亮起來 (表示有電源) :


 

打開控制台/裝置管理員/連接埠, 可看到 Prolific USB-to-Serial Comm Port (COM4) 已正常被驅動, 如果出現黃色驚嘆號的三角形, 表示驅動程式有問題, 請參考下文先安裝 : 



連接埠沒問題的話, 啟動 Realterm 通訊軟體, 免安裝版可由此下載 :

# https://dl.dropboxusercontent.com/u/68794214/Realterm.zip
 
打開 port 頁籤, 設定鮑率 Baud 為 9600, 指定埠號 port 為 4 (因 PL2303HX 為 COM4), 資料格式為 Parity=None, Data Bits 為 8, Stop Bits 為 1 Bit, 這樣應該就可以跟 0.9.2 版韌體順利連線了, 這時上面會出現 ready :


如果是較舊的韌體, 可能預設 Baud rate 不是 9600, 而是115200 或 57600, 要試一下才行. 注意, 每次修改後必須按 "Change" 才會生效, 如果出現 ready 了, 但伴隨有亂碼, 請切到 Display 頁籤, 勾選  Display As 與 ANSI, 這樣以後下 AT 命令就不會有亂碼了 :


接下來就可以切到 Send 頁籤向 ESP8266 傳送 AT 指令了, 首先須在 EOL 框中勾選 LF 與 CR, 因 Windows 系統以 LFCR 當作跳行符號, 然後就可以輸入 AT, 按 Send ASCII 鈕, 連線順利的話 ESP8266 就會回傳 OK : 


各種 AT 指令參考 :

# ESP8266 AT Command Set (PDF)
# ESP8266 Reference (PDF)
# espressif/esp8266_at
# atproto/commands.md

例如 :
  1. AT+GMR : 取得韌體版本 :
    AT+GMR                                                                         
    0018000902-AI03                                                               
                                                                                   
    OK 
    可見目前版本是 0902.
  2. AT+RST : 重新起始 ESP8266
    AT+RST                                                                         
                                                                                   
    OK                                                                             
    7!aS?'??!G?R??                                                           
    [Vendor:www.ai-thinker.com Version:0.9.2.4]                                    
                                                                                   
    ready  
  3. AT+CIOBAUD?  : 查詢鮑率 (位元速率)
    +CIOBAUD:9600

    OK
  4. AT+CIFSR : 查詢 IP 位址

    AT+CIFSR                                                                       
    192.168.4.1                                                                    
                                                                                   
    OK

    注意, 作為 STA 時,  若尚未用 CWJAP 連線基地台, 則預設 IP 為 0.0.0.0, 連線後才會被指派一個 192.168.X.X 的 STA 區域 IP. 如果 ESP8266 是在 AP/BOTH 模式, 則下 CIFSR 會看到兩個 IP, 一個是 STA IP, 另為一個是基地台 SoftAP IP. 
  5. AT+CWMODE? : 查詢目前工作模式
    AT+CWMODE?                                                                     
    +CWMODE:2                                                                      
                                                                                   
    OK     
    可見目前是模式 2 (AP 基地台模式), 1=STA 網卡模式, 3=BOTH (AP+STA).
    注意, 下完 CWMODE 最好再用 CWRST 重啟, 以確認設定有完成.  
  6. AT+CWMODE=1 : 修改工作模式為 1 (STA) 網卡模式
    AT+CWMODE=1                                                                    
                                                                                   
    OK                                                                             
    AT+CWMODE?                                                                     
    +CWMODE:1                                                                      
                                                                                   
    OK   
    要修改為雙重模式就在等號後面指定為 3 即可. 注意, STA 與 AP 模式有各自的 IP, 在 STA 模式下未連線前 IP 為預設之 0.0.0.0, 連線後基地台會配發一個 192.168.X.X 的 IP; 改為 AP 或 BOTH 模式後, ESP8266 會自行配發 192.168.4.1 的 AP IP, 故 BOTH 模式下會有兩個 IP.

    AT+CWMODE=3

    OK
    AT+CIFSR
    192.168.4.1     (這是 ESP8266 當 AP 的 IP)
    192.168.2.105 (這是 ESP8266 當 STA 的 IP)
  7. AT+CWLAP : 列出附近偵測得到的基地台
    注意, 此指令只能在 STA (=1) 與 BOTH (=3) 模式下才會回應, 在 AP 模式下會出現 ERROR.
    AT+CWLAP                                                                       
    +CWLAP:(2,"edimax.setup",-71,"74:da:38:15:16:00",1)                            
    +CWLAP:(3,"bryan",-90,"78:54:2e:26:66:28",1)                                   
    +CWLAP:(3,"TP-LINK_33C1",-86,"c4:e9:84:66:33:c1",4)                            
    +CWLAP:(4,"ching",-84,"54:b8:0a:84:f4:70",5)                                   
    +CWLAP:(4,"HOME",-70,"04:8d:38:52:ea:f7",6)                                    
    +CWLAP:(4,"alex",-85,"fc:75:16:01:26:0c",6)                                    
    +CWLAP:(4,"andy",-85,"fc:75:16:02:61:60",6)                                    
    +CWLAP:(1,"JANE-WIRELESS",-94,"00:24:01:ad:a0:65",6)                           
    +CWLAP:(4,"RFTQAD",-93,"c8:d3:a3:5f:d8:fd",9)                                  
    +CWLAP:(3,"TP-LINK_601A04",-73,"e8:de:27:60:1a:04",10)                         
    +CWLAP:(4,"EDIMAX-tony",-44,"90:1f:02:2d:5a:9f",11)  我的基地台                    
    +CWLAP:(3,"CHT5668",-89,"d8:fe:e3:5c:c0:fb",11)                                
    +CWLAP:(3,"MOTOROLA-5N6F",-89,"f8:35:dd:74:d2:b6",11)                          
    +CWLAP:(3,"45-9",-91,"d8:fe:e3:e6:90:87",11)                                   
    +CWLAP:(3,"family",-89,"6c:19:8f:b7:9a:79",1)                                  
                                                                                   
    OK
    回應訊息的格式為 : +CWLAP:(ecn,ssid,rssi,mac,mode)
    第一個參數是加密方式 ecn :
    0 OPEN (不加密)
    1 WEP
    2 WPA_PSK
    3 WPA2_PSK
    4 WPA_WPA2_PSK
    第二個參數是服務設定識別碼 SSID (即基地台代號), 第三個是接收的射頻信號強度 (dBm), 均為負值, 越負信號越弱, 最大值是 0. 第四參數是實體位址 MAC, 第五參數據 "More AT Command Information Found" 說是連接模式, 0 為手動 (manual), 1 為自動 (auto). 但上面測試卻有 0, 1 以外的值. 據 "ESP8266 WiFi module" 這篇則說是 channel, 似乎較合理, 因為 CWJAP 指令也無法設定手動或自動啊!
  8. AT+CWJAP="SSID","PWD" : 連線指定之基地台 (Join AP)
    AT+CWJAP="EDIMAX-tony","123456789111"                                         
                                                                                   
    OK 
    連線成功後再下 AT+CIFSR 查詢新指派的 IP, 還沒下 CWJAP 連線前為 0.0.0.0  :                                                                           
    AT+CIFSR                                                                       
    192.168.2.105  
    這時可在相同網域的電腦 ping 此 IP, 檢查連線是否可傳送資料 :

    C:\Users\petertw89>ping 192.168.2.105
    Ping 192.168.2.105 (使用 32 位元組的資料):
    回覆自 192.168.2.105: 位元組=32 時間=110ms TTL=255
    回覆自 192.168.2.105: 位元組=32 時間=18ms TTL=255
    回覆自 192.168.2.105: 位元組=32 時間=35ms TTL=255
    回覆自 192.168.2.105: 位元組=32 時間=55ms TTL=255

    192.168.2.105 的 Ping 統計資料:
        封包: 已傳送 = 4,已收到 = 4, 已遺失 = 0 (0% 遺失),
    大約的來回時間 (毫秒):
        最小值 = 18ms,最大值 = 110ms,平均 = 54ms   
  9. AT+CWJAP? : 查詢目前連線到哪一個基地台
    AT+CWJAP?
    +CWJAP:"EDIMAX-tony"

    OK
  10. AT+CWQAP : 離開目前連線的基地台
    AT+CWQAP

    OK
    這時再下 AT+CWJAP? 查詢連線之基地台時就會回應 ERROR :
    AT+CWJAP?

    ERROR
    這時下 CWFSR 原來指配的 IP 192.168.2.105 會消失, 回到預設 0.0.0.0
    AT+CIFSR
    0.0.0.0

    OK
  11. AT+CIPSTART : 建立 TCP/UDP 連線
    AT+CIPSTART="TCP","www.google.com",80

    OK
    Linked
    這樣就與遠端主機建立 TCP 連線了.
    AT+CIPSTART="UDP","192.43.244.18",123

    OK
    這樣就與遠端主機建立 UDP 連線了.
  12. AT+CIPSTATUS : 查詢目前 IP 連線狀態
    AT+CIPSTATUS
    STATUS:3
    +CIPSTATUS:0,"TCP","74.125.203.101",80,0

    OK

    回應訊息格式 : +CIPSTATUS:id,type,addr,port,tetype
    id 為連線通道編號, 最後面的 tetype 為 ESP8266 角色, 0 為 client, 1 為 server.
    表示目前與 IP 74.125.203.101 的 80 port 已建立了 TCP 連線 (2 表示已取得 IP 尚未連線, 3 表示 Connected, 4 表示 disconnected). 回應中的 0 為 id. 
  13. AT+CIPCLOSE : 關閉 IP 連線
    AT+CIPCLOSE

    OK
    Unlink
  14. AT+CWSAP? : 查詢 SoftAP 的設定
    此指令只有當 ESP8266 工作於 AP/BOTH 模式時才有用, 在 STA 模式下此指令會得到 ERROR 回應.

    AT+CWMODE=3   先改為 BOTH 模式

    OK
    AT+CWSAP?
    AT+CWSAP:"ESP_9CBD07","",6,0    預設 ssid, pwd, ch, ecn

    OK

    回應顯示預設未設密碼, 最後一個參數為加密方式, 預設 0=未加密, 見 CWLAP 指令. 而 ssid 是 ESP8266 作為 AP 的網路識別, 後面是其 MAC 號碼. ecn 是加密方式.
  15. AT+CWSAP="ssid","pwd",ch,ecn : 更改 AP 的設定 (只在 AP/BOTH 模式有效)

    AT+CWSAP="MYESP","1234567890",6,4

    OK
  16. AT+CWLIF : 查詢有哪些 Client 連線至此 AP (只在 AP/BOTH 模式有效)
    AT+CWLIF
    192.168.4.100,74:e1:b6:0e:f5:67

    OK
  17. AT+CIPMUX? : 詢問目前 TCP/UDP 連線模式
    這是設定 ESP8266 與同一 WiFi 網路中其他裝置的連線模式, 預設為單一連線, 如果要讓 ESP8266 當伺服器用, 必須設為 1=多重連線.

    AT+CIPMUX?
    +CIPMUX:0       (多重連線關閉, 即單一連線模式)

    OK
  18. AT+CIPMUX=1 : 設定 TCP/UDP 連線模式為多重連線
    如果要讓 ESP8266 當伺服器, 讓網域中的客戶端進行 TCP/UDP 連線, 必須開啟多重連線.

    AT+CIPMUX=1

    OK
    如果要取消 ESP8266 的伺服功能, 恢復單一連線功能, 須將 CIPMUX 設為 0 :
    AT+CIPMUX=1

    OK
  19. AT+CIPSERVER=mode[,port] : 設定是否開啟 ESP8266 為伺服器
    用 CIPMUX=1 開啟多重連線後, 就可以用 CIPSERVER 設定 ESP8266 的伺服器功能. mode=1 為開啟伺服器, 必須指定 port; mode=0 為關閉伺服器, 不須指定 port. 在單一連線下開啟伺服器, 會得到 ERROR 回應.

    AT+CIPSERVER=1,8087

    OK

    這樣 ESP8266 伺服器就會傾聽 8087 埠, 這時就可在同網域的電腦連線 ESP8266 伺服器了. 我下載克里斯寫的 Connector-Test.air 安裝後選擇當 Client, 連線 ESP8266 的 STA IP, 連線成功且能雙向傳遞訊息. 用書上的 Java Client 網路程式來測試也 OK.

    重複開啟伺服器會回應 no change :

    AT+CIPSERVER=1,8081
    no change

    關閉伺服器後必須重啟 ESP8266 (AT+RST), 其回應為 :

    AT+CIPSERVER=0
    we must restart
  20. AT+CIPSTO? : 查詢伺服器逾時計時器設定值 (秒)

    AT+CIPSTO?
    +CIPSTO:180

    OK

    預設是 180 秒
  21. AT+CIPSTO=timeout : 設定伺服器逾時計時器 (0~7200 秒)

    AT+CIPSTO=200

    OK

    其實不管設定為多少秒, 它都回應 OK, 但實際最多只能計時到 7200 秒.
設定用的 AT 指令 (例如改變工作模式或連線某個 AP) 完成後會寫入 Flash 記憶體, 即使關機也不會消失, 重開機就會回魂了. 所以設定連線哪個 AP 就會一直鎖定該 AP, 無法像筆電那樣會記錄曾經連線過的 AP 資料, 自動找信好強的連線.

ESP8266 的板子工作時摸起來溫溫的, 我拿了體溫計放在板子上測量約 39 度. 另外也接了電壓電流表測量總耗電量, 顯示 0.02A (20mA) 左右 :


以上就是今晚的測試, 終於搞定了!

2015-07-29 補充 :

賣家 blackboxstudio 表示中國製 ESP-01 板不支援 GSLP 休眠指令, 試過 AT+GSLP=10000 (休眠 10 秒) 果真無法執行. 根據 "Low Power ESP8266 – Sleeping at 78 micro Amps" 這篇得知是因為 ESP-01 板的 XPD_DCDC (8) 腳沒有接到 reset 之故.

2015-11-16 補充 :

今天找到這個網頁, 介紹 AT 指令蠻詳細的, 特別是把 ESP8266 作為伺服器的部分 :

# WiFi Module ESP8266 – 2. TCP CLIENT /Server mode

2016-05-19 補充 :

注意唷! 上面這些 AT 指令必須恰恰好, 亦即, 不可以在後面傳送多餘空格, 例如 AT+CIPSTO? 總共 10 個字元, 如果在 ? 後面多按了一個空格字元就會發生錯誤.

其他參考資料 :

# 无线网卡AP模式和station模式 
# SSID, BSSID, ESSID 
# lwIP――TCP/IP協議棧的一種實現(1)
# lwIP――TCP/IP協議棧的一種實現(2)
# lwIP――TCP/IP協議棧的一種實現(3)
# New! Arduino Pro Mini 相容 16MHz 8MHz 任選 (BB-NPMx) $145
# 小型抽水機 水泵 抽水馬達 USB arduino 可用 水冷 水循環 過濾 $145
# 超大FLASH 4M的容量 ESP8266 UART WIFI 模組 ESP-12 $180
# IOT ESP8266 串口WIFI模塊 ESP-12 (附送底板+開發資料+諮詢) $180
# ESP8266 ESP-12 ESP-07 最小系統 最小測試版 5V直用 $200
# SP-12 ESP8266串口WIFI 工業級 穩定版 測試板全套 !全IO引出
# App HTML5 開發板 WF8266R ESP8266 物聯網 IoT 智慧家電 WIFI Arduino $250
# Arduino教學-使用ESP8266 wifi模組+DHT 溫溼度感測器上傳thingspeak
# 如何用arduino来测试ESP8266 WIFI模块(wifi普及预热中)
# A Simple IoT Project with the ESP8266 WiFi module
# 5$ Arduino WiFi Module!? ESP8266 mini Tutorial/Review
# Cheap and Easy WiFi (IoT) Tutorial Part 1 - ESP8266 Setup/Intro
# ESP8266 的「IoT 創意致富」課程規劃
# NodeMCU 物聯網開發平台
# BitBastelei #132 - WLAN-Thermometer mit ESP8266 & DHT22
# ESP8266: testing deep sleep & interrupts !?
# Low Power ESP8266 – Sleeping at 78 micro Amps
# 無線基地台 SSID 中文化的設定方法
# Esp8266 firmware update

2015年7月28日 星期二

到訪人數 287287

早上準備完姊姊的早餐, 寫一下部落格, 突然發現到訪人數 287287, 又觸動了我的數字怪癖, 紀錄如下 :


其實我會認真寫部落格, 主要的原因是要利用 Google 強大的搜尋引擎幫我瞬間找到自己以前寫的筆記, 其次才是分享心得的 "大愛". 當我找不到自己以前研究過的心得筆記時, 就會有 "秘笈遺失恐慌症", 到處翻箱倒櫃暴力搜尋. 有了 Google 真方便.

Arduino 用的小機箱

最近在露天看到一個塑膠製的機殼 :

# 小機殼..機箱..塑膠機殼..70*90*28 $32

經繪製大略尺寸研判可以作為 Arduino 實驗電路板的機箱之用, 就買下僅剩的五個 (有要求賣家繼續進貨啦). 買回來之後發現剛好可以擺進一個 5cm*7cm 的洞洞板, 實在太速配了, 難道製造廠家就是為了能放進這尺寸的洞洞板而開模的嗎?


我是想將 PIR 紅外線人體移動偵測器 + ESP8266 WiFi 模組 + 鹼性電池放到此小機箱內, 這樣只要一有人經過就會記錄在網路伺服器上或透過代理 API傳送簡訊.

參考 :

# 電子儀器塑膠盒 儀器盒 工具盒 小接線盒 接受客製 arduino 可用 $88


2015年7月27日 星期一

第 31 周記事 : 風力發電機安裝 part 5

周六 7/25 菁菁跟阿姨她們一家去台東玩, 所以本周只有我與姐姐回鄉下. 週日下午小舅全家來採龍眼, 舅媽拿了梯子上樹, 把門前那棵龍眼樹幾乎摘個精光 (她說好多年沒爬樹了). 龍眼到這周最甜, 本周不採的話, 下周可能退甘. 下周換採路邊的那棵龍眼樹.

斷斷續續弄了好一陣子的風力發電機實驗, 本周終於完成安裝了. 周日早上起來後把風機拿到頂樓安裝, 本來姊姊要幫我的, 但她還在歐歐睏, 所以只好自己來, 只是鎖螺絲稍微吃力而已. 才日正當中就吹起西南風了, 一裝上去風機就狂轉, 基本上如以前所觀察到的, 以西南到西北兩個方向的風為主流, 大雨前的狂風才會東西南北都有.


滾珠軸承的腳架剛好鎖進兩支角鐵組成的ㄇ字型結構內 :


用小北買的花線 ($179) 把電接到鐵皮屋內, 連接直流電壓表, 空載時電壓測得 50V~70V :


接上 3W LED 聚光燈負載后, 降到 10V, 不知是否燈具內有穩壓二極體保護?


整個下午都呼呼地轉, 一直到晚上才停.


如果每天下午都這樣吹, 不知能在傍晚前充飽電瓶否? 下周買好電瓶再來試驗. 小舅說的沒錯, 現在都是屬於玩而已, 經濟效益是零. 但是每次腦海中浮現新點子時, 心裡就感到無比興奮, 希望趕快實作出來.

能玩自己想玩的, 就是最大的快樂.

2016-06-24 補充 :

# 0921315178 DIY簡易風力發電機製作 Wind-driven generator
# 0921315178 DIY迷你型風力發電機
# 0921315178風扇葉片 發電機測試 簡易的風力發電 diy
# 三相交流發電機 馬達 減速 電機 風力水力 $300
# 集電環 DIY 發電機 改造 馬達 實習 減速 電機 風力發電機 $200