<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                * 導師**視頻**講解:[**去聽課**](https://www.bilibili.com/video/BV1k34y1D7Vz/) >[success] **技術支持說明:** >**1**.一般以自主學習為主 > **2**.可到官方問答社區中提問:[**去提問**](https://bbs.csdn.net/forums/zigbee) > **3**.工程師**會盡快**解答社區問題,但他們是一線開發,【**難以保證**】解答時效,解答辛苦,感謝理解! <br/> ## **重要配置** **WiFi配置** 打開本節課配套的工程,配套工程所在目錄為:《ZigBee3.0開發止指南》配套資源(**附加部分**)/課外篇:進階選修/ZigBee2Wifi\_ESP8266,接著打開zb\_common.h 文件,內有WiFi名稱與密碼定義,如圖所示。 ![](https://img.kancloud.cn/b1/51/b1510fbb5ac9ac501ca9bddaf53d117c_1035x908.png =500x) ### 讀者需要把此處的WiFi名稱與密碼修改為家里WiFi名稱與密碼,以便開發套件能夠接入到家里的WiFi路由器。 <br/> ## **源代碼講解** ESP8266我們采用AT指令的方式進行驅動;關鍵程序在 zb_port.c 中;zb_port.c 中有一個定時器: ``` void zb_port_on_timer(uint16_t ms) { #if ZG_BUILD_COORDINATOR_TYPE zb_port_on_coordinator_timer(); #elif ZG_BUILD_RTRONLY_TYPE #else #endif } ``` 這個定時器每隔1秒會運行一次,可以看到我們針對協調器做了處理:調用 zb_port_on_coordinator_timer() : ``` void zb_port_on_coordinator_timer(void) { static uint8_t cnt = 0; if (++cnt < 6) return; cnt = 3; static uint8_t connWifi = 0; static uint8_t connTcp = 0; char buf[50] = { 0 }; switch(espstep) { /* AT test */ case 0: zbmsg_->send("AT\r\n", 4); HalLcdWriteString("step-1", 3); break; /* Setting */ case 1: zbmsg_->send("AT+CWMODE_DEF=1\r\n", 17); HalLcdWriteString("step-2", 3); break; /* Connect WiFi */ case 2: if (connWifi == 0) { sprintf(buf, "AT+CWJAP_DEF=\"%s\",\"%s\"\r\n", WIFI_NAME, WIFI_PASSWD); connWifi = 1; HalLcdWriteString("step-3", 3); zbmsg_->send((uint8_t*)buf, strlen(buf)); } break; /* Config Mode */ case 3: HalLcdWriteString("step-4", 3); zbmsg_->send("AT+CIPMUX=0\r\n", 13); break; /* Connect to TCP server */ case 4: #define TCP_SERVER "AT+CIPSTART=\"TCP\",\"1.15.27.206\",12300\r\n" if (connTcp == 0) { connTcp = 1; HalLcdWriteString("step-5", 3); zbmsg_->send((uint8_t *)TCP_SERVER, strlen(TCP_SERVER)); } break; /* Send message to TCP server */ case 5: #define TCP_MESSAGE "Hello World!" sprintf(buf, "AT+CIPSEND=%d\r\n", strlen(TCP_MESSAGE)); zbmsg_->send((uint8_t*)buf, strlen(buf)); break; case 6: zbmsg_->send((uint8_t*)TCP_MESSAGE, strlen(TCP_MESSAGE)); break; /* Error */ case 7: connTcp = 0; espstep = 3; break; default: break; } } ``` 這里其實是在驅動ESP8266去連接WiFi,連接成功后會打開TCP向服務器發送數據;我們通過串口向 ESP8266 發送AT指令后,需要等待模塊的響應(串口接收)來告訴我們AT指令是否執行成功: ``` void zb_port_on_coordinator_uart(const uint8_t *data, uint8_t len) { switch(espstep) { case 0: if (strstr((char *)data, "OK") != NULL) { espstep++; HalLcdWriteString("ok-1", 4); } else if (strstr((char *)data, "WIFI CONNECTED") != NULL) { espstep = 3; HalLcdWriteString("ok-wifi", 4); } break; case 1: if (strstr((char *)data, "OK") != NULL) { espstep++; HalLcdWriteString("ok-2", 4); } break; case 2: if (strstr((char *)data, "IP") != NULL || strstr((char *)data, "OK") != NULL) { espstep++; HalLcdWriteString("ok-3", 4); } break; case 3: if (strstr((char *)data, "OK") != NULL) { espstep++; HalLcdWriteString("ok-4", 4); } break; case 4: if (strstr((char *)data, "OK") != NULL) { espstep++; HalLcdWriteString("ok-5", 4); } break; case 5: if (strstr((char *)data, ">") != NULL) { espstep++; HalLcdWriteString("ok-6", 4); } break; case 6: if (strstr((char *)data, "CLOSED") != NULL) { espstep++; HalLcdWriteString("err-1", 4); } break; default: break; } } ``` 很顯然,我們發送一個AT指令,如果收到ESP8266的回應,并且是正常的,才會進行下一個AT指令的發送,從而實現異步的方式。 <br/> ## **程序測試** (1)通過PuTTY登錄到遠程服務器,并輸入如下命令運行 tcpserver服務: ~~~ ./tcpserver ~~~ tcpserver服務啟動成功,如圖所示。 ![](https://img.kancloud.cn/8b/84/8b84c60f4584072441a43e5fa9c7f8f8_826x520.png =500x) ### (3)如果使用Mini板測試,則: * 把ESP8266 WiFi模塊插入到ZigBee MiNi板中,如圖所示。 ![](https://img.kancloud.cn/2f/70/2f70759aeaab588cb57b267e9aba6fa8_1270x834.png =300x) * 把 0.96 OLED顯示屏插入到ZigBee MiNi板中,如圖所示。 ![](https://img.kancloud.cn/85/23/85230be6093e36d6c76abe9543b41e3a_2526x2067.png =250x) ### (4)如果使用標準板測試,在插入ESP8266 WiFi模塊和 0.96 OLED顯示屏后,還需要按如圖所示配置撥碼開關,即第1、2、3和4位撥到右邊,第5、6、8、9和10位撥到左邊,其中的第7位無需配置,如圖所示。 ![](https://img.kancloud.cn/5d/ea/5dea000a46ff9d0ae19d3676ad123c73_1279x1706.png =200x) ### (5)選擇Coordinator角色編譯配套的實驗代碼,并下載到開發板中。 >[danger] 注意 (1)在使用仿真器燒錄程序的同時,需要使用Micro USB線給開發板供電。 (2)在使用CC2530使用AT指令驅動WiFi模塊時,建議把仿真器拔掉,以免引起未知問題。 <br/> (6)可以看到顯示屏上面提示AT指令執行的過程,如圖所示。 ![](https://img.kancloud.cn/e8/0d/e80decc3859ec12748a0a3905ac93a40_359x703.png =300x) <br/> 并且服務器上也收到了消息,如圖所示。 ![](https://img.kancloud.cn/5c/c6/5cc6d8f5d76380e4375ad502e3019dd4_827x522.png =500x)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看