2017年6月26日 星期一

ESP8266 ESP-01 WiFi 模組

術語與縮寫

WiFi

Wireless Fidelity

UART


Universal Asynchronous Receiver & Transmitter

P2P


Point to Point

TCP

Transmission Control Protocol

IP

Internet Protocol

WPA

WiFi Protected Access

WPS

WiFi Protected Setup



ESP8266/ESP-01 簡介



ESP8266 是低功耗的 UART-WiFi 透傳模組,特色是體積小而且低功耗,適用移動裝置或物聯網的設計,可將嵌入式的裝置連到 WiFi 無線網路,進行 Internet 或 LAN 通訊,實現聯網功能。

Features 特色


支援無線 802.11 b/g/n 標準
支援 STA/AP/STA+AP 三種工作型態
內建 TCP/IP stack,支援多路 TCP Client 連線
支援 Socket AT 指令
支援 UART/GPIO
3.3V 單電源供應

主要功能

ESP8266可以實現的主要功能包括:串列埠透傳,PWM 調控,GPIO控制。

串列埠透傳:資料傳送,傳送的可靠性好,最大的傳送速率為:460800bps。
PWM 調控:燈光調節,三色LED 調節,電機調速等。
GPIO控制:控制開關,繼電器等。

工作型態


電腦用 COM port 與 ESP8266 模組連接,透過 UART 兩者之間通訊。由電腦端可以發送 AT command 進行設定。ESP8266 預設的 baudrate 為 9600,8,n,1。

ESP8266模組支援 STA/AP/STA+AP 三種工作型態。

STA 型態:ESP8266模組通過路線器連線互聯網,手機或電腦通過互聯網實現對裝置的遠端控制。
 AP 型態:ESP8266模組作為熱點,實現手機或電腦直接與模組通訊,實現區域網路無線控制。
 STA+AP 型態:兩種型態的共存型態,即可以通過互聯網控制可實現無縫切換,方便作業。


測試方法



電腦和手機端要當作伺服器端(SERVER),讓模組作為客戶端(CLIENT)發送請求連線與進入通訊埠(PORT),需要下載 TCP 的除錯軟體。也要將模組切換 STA/AP,以做 server/client 之間的切換。



Fig.1 系統架構圖

1. ESP8266 模組當作 Server ,PC 當作 Client:
將模組用 AT command 設定為 AP 型態,用PC連上 ESP8266 模組的 WiFi ,並在 PC 端開啟 TCP 測試的應用程式,連接ESP8266的 IP 位址和通訊埠。

2. PC 當 Server,ESP8266 當 Client:
在 PC 端開啟 WIFI熱點,讓模組可以連入。在電腦端使用 TCP/IP server 的應用程式建立 Server,等待模組連線至電腦的熱點,連上WIFI熱點並取得 IP後,模組使用 CIPSEND的指令進入傳透模式,將被傳送的資料寫入模組的 UART port 即開始傳送資料,可以在這裡建立使用者互相通訊的模式。

3.手機端當作 server ,ESP8266 當 Client:
與第二點相同,用手機開啟 TCP的應用程式,等待模組的連入並建立連線。


透傳型態測試


大致上模組進行連線通訊的流程

供電並致能以後,執行 AT 指令

AT+CWMODE=3
AT+RST

AT+CIPMODE=1 //設定透傳型態

// 模式可以設定後,連上AP點的網路,開啟TCP連線


AT+CWLAP                            //列出目前可用的AP點
AT+CWJAP=“SSID”,”PWD” //加入指定的 AP

/*  連上WIFI,有網路以後就可以做為 Client 連上 TCP Server,相反的模組也可以自己當 server  */

AT+CIFSR                               //抓取IP位址,檢查是否連接到 IP

AT+CIPSTART=“TYPE”,”ADDR”,”PORT”
 //建立TCP/UDP連線,指定 Server 的 IP 位址,和通訊埠


AT+CIPSTATUS


AT+CIPSEND //開始傳送,CIPMODE=1並且作為用戶端,進入透傳型態

AT+CIPSEND=<LENGTH>  //LENGTH 決定要傳送的 Bytes 數



建立 TCP SERVER


AT+CIPMUX=1
AT+CIPSERVER=1

只要兩行指令就將伺服器建立起來了,這時候會不知道 SERVER 的 IP 位址是多少,可以再用 CIFSR 來看,預設的通訊埠為 333。

所以在將 server 建立之前先設定 STA使用的 IP位址,在 server 建立的同時設定通訊埠。

AT+CIPSTA_CUR="192.168.94.87"
AT+CIPMUX=1
AT+CIPSERVER=1,9487

AT+CIFSR  //查看 IP 及 STAIP,MAC
AT+CIPSTA_CUR?  //查看 STAIP, Gateway



2017年6月20日 星期二

typedef的用法

typedef 與 #define 類似,但是 #define 是做字串直接的替換,typedef 像是幫型態類別重新取名。

typedef
1.一次宣告多個指標型態的物件
2.typedef 用在 struct,以往每在宣告 struct 的新物件時,都要帶上 struct
3.用 typedef 來定義與平台無關的型態
4.為複雜的宣告定義一個新的簡單的別名



1.不僅僅是簡單的替換。可以作為同時宣告多個指標的物件。
char* pa, pb;

typedef char* PCHAR;
PCHAR pa, pb;


#define char* PCHAR
PCHAR pa, pb;
//實際上變成只有 pa 是指標型態
//char* pa; char pb;


2.

struct tagPOINT1
{
int x;
int y;
};

struct tagPOINT1 p1;

- - - - - - -

typedef struct tagPOINT
{
int x;
int y;
}POINT;
POINT p1;

3.

typedef int number_max;

有個變數只用來存 2 byte的大小,想要換平台,改用更大的型態,這樣原本宣告的新名稱不用變動。

typedef DWORD number_max;


4. 複雜宣告的簡化

void (*b[10])(void(*)());

typedef void(*pFunParam)();
typedef void(pFunx)(pFunParam);

簡化後
pFunx b[10];