2017年5月17日 星期三

DIY - ESP8266:ESP8266 模塊 Soft-AP TCP Server 初始化程式(二十七)

DIY - ESP8266:ESP8266 模塊 Soft-AP TCP Server 初始化程式(二十七):

筆者目的是將 ESP8266 接收資料數據,用無線網絡 (WiFi)將資料傳送到電腦 PC 或手機作處理,一台 ESP8266 伺服器(Server)對 1台客戶端 (電腦 PC 或手機) ,暫時不會透過 Internet 將資料數據上傳到雲端,所以會選擇用 Soft-AP 無線網絡模式,TCP (Transmission Control Protocol / 傳輸控制協定)協議和伺服器(Server)設定。

ESP8266 模塊 WiFi Soft-AP TCP Server 模式
ESP8266 Soft-AP 的配置初始化流程: 
1. 將 ESP8266 配置成 Soft-AP 模式,將模式改為 SOFTAP_MODE(0x02) 
2. 取得當前 AP 配置 
3. 更改配置參數 ssid 和 password 
4. 使用 wifi_softap_set_config 設置 AP 參數(設置遠端 Server 的 IP 位址及埠號) 
5. 註冊連接偵測回調函數(wifi_set_event_handler_cb) 
6. 設定系統任務 
7. 創建 TCP Server 及設定 TCP 參數 
8. 調用 espconn_accept 偵聽 TCP 連接 
9. 註冊計時器

ESP8266 Soft-AP 配置的初始化程式:
/******************************************************************************
 * FunctionName : user_init(void)
 * Description  : User Init Program Start Here
 * Parameters   : none
 * Returns      : none
*******************************************************************************/
void ICACHE_FLASH_ATTR user_init(void)
{
    struct softap_config apConfig;

    // Start SOFTAP Configuration
    // Set SOFTPA Mode = 0x02
    wifi_set_opmode(SOFTAP_MODE);

    // Copy SOFTAP Config Parameters
    os_memset(&apConfig,0x0,sizeof(apConfig));
    apConfig.authmode = AUTH_OPEN;
    apConfig.channel = 0;
    apConfig.max_connection = 4;
    apConfig.ssid_len = os_strlen(TRANS_SSID);
    os_strncpy(apConfig.ssid,TRANS_SSID,os_strlen(TRANS_SSID));

    // Setup SOFTAP Config Parameters
    wifi_softap_set_config(&apConfig);

    // Register Callback Monitor WiFi Status
    wifi_set_event_handler_cb(wifi_event_handler_cb1);

    // Create a System Task that Processes (TRANS_TASK) Transparently Transmitting Data
    // ETSEvent -> ETSSignal sig = TRANS_TASK_PROI 0~3 0=Lowest
    // ETSEvent -> ETSPram   par = trans_Queue
    system_os_task(trans_task, TRANS_TASK_PROI, trans_Queue, TRANS_QUEUE_LEN);

    // Create TCP Server and Allocate address for ESPCONN
    pTcpServer = (struct espconn *)os_zalloc((uint32)sizeof(struct espconn));

    // Check TCP Server Setup OK
    if (pTcpServer == NULL) {
        OLED_Print(0, 2, "TCPServer Failure!", 1);
        return;
    }

    // Configure TCP Server Parameters
    pTcpServer->type = ESPCONN_TCP;
    pTcpServer->state = ESPCONN_NONE;
    pTcpServer->proto.tcp = (esp_tcp *)os_zalloc((uint32)sizeof(esp_tcp));
    pTcpServer->proto.tcp->local_port = 8888;

    // Register Callback Connect
    espconn_regist_connectcb(pTcpServer, trans_server_listen);
    espconn_accept(pTcpServer);
    espconn_regist_time(pTcpServer, 180, 0);

    // Closed Timer and Setup Timer
    os_timer_disarm(&trans_interval_timer);
    os_timer_setfn(&trans_interval_timer, (os_timer_func_t *)transmit_data1, NULL);
}


ESP8266 模塊 WiFi Soft-AP TCP Server 模式
ESP8266 模塊 WiFi Soft-AP TCP Server 模式的 OLED 顯示
2017年 5月 17日 天氣報告
氣溫:26.0@ 20:00
相對濕度:百分之 78%
天氣:大致多雲

沒有留言:

張貼留言