官方網(wǎng)站:http://www./en/support/download/documents ESP8266 SDK 編程入門http://blog.csdn.net/jackhuang2015/article/details/50850204
ESP8266 個(gè)人資料網(wǎng)站:鏈接:http://pan.baidu.com/s/1nv0jeSp 密碼:m7ff
一. 硬件
ESP8266EX 開(kāi)發(fā)板
模組方案:
二. 軟件
1.燒錄軟件(ESP_DOWNLOAD_TOOL_V2.4.exe) 、 注意燒寫地址和文件 燒寫方法如下,先按住FLASH不放,再按一下RST鍵,測(cè)試版既可以就如UART燒寫狀態(tài),然后按下軟件START進(jìn)行燒寫,如果燒寫不進(jìn)去可先按住軟件的START再重復(fù)上述動(dòng)作,多試幾次。
2.串口調(diào)試工具(sscom42.exe)
3.網(wǎng)絡(luò)調(diào)試助手(NetAssist.exe)
2.SDK編譯環(huán)境(本人用Non-OS SDK) RTOS SDK 和 Non-OS SDK 有何區(qū)別?主要差異點(diǎn)如下: 【Non-OS SDK】 Non-OS SDK 主要使用定時(shí)器和回調(diào)函數(shù)的方式實(shí)現(xiàn)各個(gè)功能事件的嵌套,達(dá)到特定條件下觸發(fā)特定功能函數(shù)的目的。Non-OS SDK 使用 espconn 接口實(shí)現(xiàn)網(wǎng)絡(luò)操作,用戶需要按 照 espconn 接口的使用規(guī)則進(jìn)行軟件開(kāi)發(fā)。 【RTOS SDK】 1. RTOS 版本 SDK 使用 freeRTOS 系統(tǒng),引入 OS 多任務(wù)處理的機(jī)制,用戶可以使用 freeRTOS 的標(biāo)準(zhǔn)接口實(shí) 現(xiàn)資源管理、循環(huán)操作、任務(wù)內(nèi)延時(shí)、任 務(wù)間信息傳遞和同步等面向任務(wù)流程的設(shè)計(jì)方式。具體接口使用方法參考 freeRTOS 官方網(wǎng)站的使用說(shuō)明或者 USING THE FREERTOS REAL TIME KERNEL--A Practical Guide 介紹。 2. RTOS 版本 SDK 的網(wǎng)絡(luò)操作接口是標(biāo)準(zhǔn) lwIP API,同時(shí)提供了 BSD Socket APIsocket 接口的封裝實(shí)現(xiàn),用戶可以直接按照socket API的使用方式來(lái)開(kāi)發(fā)軟件應(yīng)用,也可以直接編譯運(yùn)行其他平臺(tái)的標(biāo)準(zhǔn) Socket 應(yīng)用,有效降低平臺(tái)切換的學(xué)習(xí)成本。 3. RTOS 版本 SDK 引入了 cJSON 庫(kù),使用該庫(kù)函數(shù)可以更加方便的實(shí)現(xiàn)對(duì) JSON 數(shù)據(jù)包的解析。 4. RTOS 版本兼容non-OS SDK中的Wi-Fi接 口、smart config接口、Sniffer相關(guān)接口、系統(tǒng)接口、定時(shí)器接 口、FOTA接口和外圍驅(qū)動(dòng)接口,不支持AT實(shí)現(xiàn)。
二次開(kāi)發(fā)軟件 三.參考文件
四. 基本程序解析 1.輸出控制 PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U,FUNC_GPIO12);//初始化GPIO2 GPIO_OUTPUT_SET(GPIO_ID_PIN(15), 0);//將GPIO2設(shè)置為低電平 2.輸入采集 PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U,FUNC_GPIO12);//初始化GPIO2 if(GPIO_INPUT_GET(GPIO_ID_PIN(12))==0) { } 3.定時(shí)器 (放在主程序里) os_timer_disarm(&timer);//關(guān)閉定時(shí)器,相當(dāng)于計(jì)時(shí)器的計(jì)數(shù) os_timer_setfn(&timer,(os_timer_func_t *)timer_callback,NULL);//初始化定時(shí)器 os_timer_arm(&timer,1000,1);//開(kāi)始定時(shí)器,1000毫秒后,回調(diào)前面的callback函數(shù)(后面的0表示只運(yùn)行為一次 1表示循環(huán)運(yùn)行)
(應(yīng)該放在主程序前) void timer_callback()//回調(diào)的函數(shù)
{
} 4.設(shè)置WiFi模式 (參考2C-ESP8266__SDK__Programming Guide__CN_v1.5.pdf或者2C-Espressif IoT SDK 編程手冊(cè)_v0.9.1.pdf) (放在主程序里) wifi_set_opmode(0x02);// 設(shè)置WiFi模式為AP
5.設(shè)置wifi的名稱和密碼 (應(yīng)該放在主程序前) void ICACHE_FLASH_ATTR user_set_softap_config(void)//設(shè)置wifi的名稱和密碼 { struct softap_config config; os_memset(config.ssid,0, 32); os_memset(config.password,0, 64); os_memcpy(config.ssid,"ESPESP22", 9);//SSID賬號(hào) os_memcpy(config.password,"99999999", 8);//密碼 config.authmode=AUTH_WPA_WPA2_PSK; config.ssid_len=0; config.max_connection=5;//允許接入點(diǎn)數(shù)量
wifi_softap_set_config(&config);//設(shè)置 WiFi soft-AP 接?配置,并保存到 flash }
6.UDP數(shù)據(jù)接收與發(fā)送 (應(yīng)該放在主程序前 定義結(jié)構(gòu)體用于UDP數(shù)據(jù)接收與發(fā)送) struct espconn PhoneConn;//定義結(jié)構(gòu)體 esp_udp PhoneConnUdp; (放在主程序里) PhoneConn.type=ESPCONN_UDP; PhoneConn.proto.udp=&PhoneConnUdp; PhoneConn.proto.udp->local_port=9999;//本地端口 PhoneConn.proto.udp->local_port=9999;//遠(yuǎn)程端口
PhoneConn.proto.udp->remote_ip[0]=255;//指定遠(yuǎn)程IP地址 PhoneConn.proto.udp->remote_ip[1]=255; PhoneConn.proto.udp->remote_ip[2]=255; PhoneConn.proto.udp->remote_ip[3]=255;
PhoneConn.proto.udp->remote_ip[0]=255; //指定本地IP地址 PhoneConn.proto.udp->remote_ip[1]=255; PhoneConn.proto.udp->remote_ip[2]=255; PhoneConn.proto.udp->remote_ip[3]=255;
espconn_regist_recvcb(&PhoneConn,udpclient_recv);//注冊(cè)一個(gè)UDP數(shù)據(jù)包接收回調(diào) espconn_create(&PhoneConn);//建立UDP回調(diào)
(應(yīng)該放在主程序前 回調(diào)的函數(shù)udpclient_recv 用于判斷接收到的數(shù)據(jù)) void ICACHE_FLASH_ATTR udpclient_recv(void *arg,char *pdata, unsigned short len) { if (pdata[0]=='L'&&pdata[1]=='E'&&pdata[2]=='D'&&pdata[3]=='0') { }
}
(用于發(fā)送數(shù)據(jù)) espconn_sent(&PhoneConn,"LED打開(kāi)!",9);
五. 例程
#include "os_type.h" //#include "driver/gpio16.h" #include "gpio.h" //#include "driver/uar.h"http://串口外設(shè)驅(qū)動(dòng)庫(kù) #include "user_interface.h" #include "spi_flash.h" #include "espconn.h" #include "user_config.h" #include "smartconfig.h"
#include "ets_sys.h" #include "osapi.h"
struct espconn PhoneConn;//定義結(jié)構(gòu)體 esp_udp PhoneConnUdp;
void ICACHE_FLASH_ATTR udpclient_recv(void *arg,char *pdata, unsigned short len) { if (pdata[0]=='L'&&pdata[1]=='E'&&pdata[2]=='D'&&pdata[3]=='0') { GPIO_OUTPUT_SET(GPIO_ID_PIN(12), 0); //espconn_sent(&PhoneConn,"打開(kāi)LED成功!" ,13);//接收數(shù)據(jù) }
if (pdata[0]=='L'&&pdata[1]=='E'&&pdata[2]=='D'&&pdata[3]=='1') { GPIO_OUTPUT_SET(GPIO_ID_PIN(12), 1); }
if(GPIO_INPUT_GET(GPIO_ID_PIN(12))==0) { espconn_sent(&PhoneConn,"LED打開(kāi)!",9); } else { espconn_sent(&PhoneConn,"LED關(guān)閉!",9); }
}
LOCAL os_timer_t timer;//定義結(jié)構(gòu)體用于定時(shí)器
void ICACHE_FLASH_ATTR user_set_softap_config(void)//設(shè)置wifi的名稱和密碼 { struct softap_config config; os_memset(config.ssid,0, 32); os_memset(config.password,0, 64); os_memcpy(config.ssid,"ESPESP22", 9);//SSID賬號(hào) os_memcpy(config.password,"99999999", 8);//密碼 config.authmode=AUTH_WPA_WPA2_PSK; config.ssid_len=0; config.max_connection=5;//允許接入點(diǎn)數(shù)量
wifi_softap_set_config(&config);//設(shè)置 WiFi soft-AP 接?配置,并保存到 flash }
char zt = 1;
void timer_callback()//回調(diào)的函數(shù)
{ if(zt == 1){ GPIO_OUTPUT_SET(GPIO_ID_PIN(15), 0);//將GPIO2設(shè)置為低電平 zt = 0; }else{ GPIO_OUTPUT_SET(GPIO_ID_PIN(15), 1);//將GPIO2設(shè)置為低電平 zt =1; } }
void user_init(void) { wifi_set_opmode(0x02);//設(shè)置WiFi模式為AP user_set_softap_config();
PhoneConn.type=ESPCONN_UDP; PhoneConn.proto.udp=&PhoneConnUdp; PhoneConn.proto.udp->local_port=9999;//本地端口 PhoneConn.proto.udp->local_port=9999;//遠(yuǎn)程端口 PhoneConn.proto.udp->remote_ip[0]=255;//指定IP地址 PhoneConn.proto.udp->remote_ip[1]=255; PhoneConn.proto.udp->remote_ip[2]=255; PhoneConn.proto.udp->remote_ip[3]=255;
PhoneConn.proto.udp->remote_ip[0]=255; PhoneConn.proto.udp->remote_ip[1]=255; PhoneConn.proto.udp->remote_ip[2]=255; PhoneConn.proto.udp->remote_ip[3]=255;
espconn_regist_recvcb(&PhoneConn,udpclient_recv);//注冊(cè)一個(gè)UDP數(shù)據(jù)包接收回調(diào) espconn_create(&PhoneConn);//建立UDP回調(diào)
//os_printf("SDK version:%s\n", system_get_sdk_version()); PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U,FUNC_GPIO12);//初始化GPIO2 PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U,FUNC_GPIO15);//初始化GPIO2
os_timer_disarm(&timer);//關(guān)閉定時(shí)器,相當(dāng)于計(jì)時(shí)器的計(jì)數(shù) os_timer_setfn(&timer,(os_timer_func_t *)timer_callback,NULL);//初始化定時(shí)器 os_timer_arm(&timer,5000,1);//開(kāi)始定時(shí)器,1000毫秒后,回調(diào)前面的callback函數(shù)(后面的0表示只運(yùn)行為一次 1表示循環(huán)運(yùn)行)
}
void user_rf_pre_init(){} 六. 安卓APP編譯 軟件E4A(易安卓(有免費(fèi)版)) 1.主界面 2.代碼 |
|
來(lái)自: 風(fēng)雲(yún)再現(xiàn) > 《待分類》