1. 程式人生 > >ESP8266 SDK開發篇(二)——連線wifi

ESP8266 SDK開發篇(二)——連線wifi

上一節我講了搭建SDK開發環境以及燒錄方式,那麼從這一節開始就進入正題——如何進行SDK開發,既然ESP8266是wifi模組,那麼我就從如何連線wifi開始講起。

一、建立工程

我開發的時候比較早,用的是NONOS_v1.5.0的sdk,最新的v2.1.0的sdk燒錄好韌體後,上電會一直出Fatal exception 28的錯誤,搞了一天沒弄清楚,所以用還留著的v1.5.3的sdk講解,具體使用方法不會有很大改變,詳細也可以參考API文件。
開啟解壓sdk包,將example資料夾下的IOT_Demo複製替換到app資料夾下,並將driver_lib/include/driver下的uart.h、uart_register.h

複製到app/include下,driver_lib/driver下uart.c複製到app/driver下,同時將driver_lib下Makefile檔案改名或者刪除,懂makefile的朋友可以自行修改makefile檔案否則會出現編譯錯誤,目錄結構如下。


這裡寫圖片描述這裡寫圖片描述
目錄結構
我們主要修改的是user_main.c這個檔案,將user_init()函式是程式入口,裡的內容全刪了
此外標頭檔案修改為
#include "ets_sys.h"
#include "osapi.h"
#include "user_interface.h"
#include "uart.h"

user_rf_pre_init()

這個函式不要刪除,放著即可,這樣user_main.c檔案只有void user_rf_pre_init(void)、void user_init(void)這兩個函式,以及4個頭檔案。

二、連線wifi

要連線wifi首先要指定要連線的wifi賬號和密碼,則需要定義兩個變數來存放它們,同時還需要定義一個結構體用於存放:Wi-Fi Station 介面引數。

struct station_config station_cfg;
uint8 ssid[]="xxx";         //wifi名
uint8 password[]="xxx";     //wifi密碼

新買到的模組預設是作為AP,這裡我們需要將它修改作為Station,這樣才能連wifi,這裡我將這幾個操作放入一個函式裡面。

void ICACHE_FLASH_ATTR
user_set_station_config(void)
{
    wifi_set_opmode(STATION_MODE);              //設定為STATION MODE
    os_strcpy(station_cfg.ssid, ssid);          //ssid名稱
    os_strcpy(station_cfg.password, password);  //密碼
    wifi_station_set_config(&station_cfg);      //設定WIFI帳號和密碼
}

注:新增ICACHE_FLASH_ATTR巨集定義是因為8266的iRam空間有限,所以上電啟動時不能把所有資料都放入iRam,只有在需要用到的時候才載入,因此推薦一般的函式都加ICACHE_FLASH_ATTR。
這樣我們就能把這個函式放到user_init()中了,如下所示。

void user_init(void)
{
    uart_init(BIT_RATE_115200,BIT_RATE_115200);  //設定波特率為115200
    os_printf("SDK version:%s\n", system_get_sdk_version());  //列印sdk版本
    user_set_station_config();  //set STATION config
    //user_set_station_config()中呼叫wifi_station_set_config(&station_cfg)
    //底層會自動連線對應路由,不需要呼叫 wifi_station_connect 來進行連線。
}

編譯通過後燒入韌體就能檢視效果了。


這裡寫圖片描述
串列埠輸出
這裡寫圖片描述
路由器後臺
這樣最簡單的連線wifi就完成了,為後續要跟伺服器進行TCP/UDP協議的通訊打下基礎,那麼問題來了,連上wifi是否意味著一定能上網?假設能通過這個路由器上網,但是如果節點很多,超過了DHCP分配範圍的話,這樣晶片就獲取不了ip,因此需要判斷晶片是否分配到了ip地址,這個就作為本講作業,給剛入門的朋友思考一下(提示:多看API文件)。
本講用到的sdk和文件可以從此處下載

相關推薦

ESP8266 SDK開發——連線wifi

上一節我講了搭建SDK開發環境以及燒錄方式,那麼從這一節開始就進入正題——如何進行SDK開發,既然ESP8266是wifi模組,那麼我就從如何連線wifi開始講起。 一、建立工程 我開發的時候比較早,用的是NONOS_v1.5.0的sdk,最新的v2

python3 django框架開發 連線資料庫,建表

轉載請註明:https://blog.csdn.net/weixin_40490238/article/details/84573309 安裝pymysql包,點選settings 查詢pymysql,點選install package 開啟settings.p

Qt開發之中國象棋:棋盤的繪製

        中國象棋遊戲的棋盤繪製主要是在 chessarea.cpp 中的 paintEvent 重繪事件中實現 ,主要用到 QPainter 類的畫筆,在畫棋盤的線之前,我們先調整一下棋盤的背景顏色。     &nbs

thinkphp開發總結——同時連線mysql與mongodb資料庫

一、連線mongodb資料庫 連線mongodb我採用的是tp裡的config配置,在Common/Conf/config.php: <?php return array( //資料庫配置資

Revit開發之技能———軸網尺寸標註

在利用revit出圖時,避免不了要對軸網進行標註,下面分享一下軸網尺寸標註的一些開發經驗: 軸網尺寸標註: 首先要獲取到尺寸標註的引用,將引用新增到引用集合中,關鍵程式碼如下: ReferenceArray array = new ReferenceArray(); array.

Android WiFi開發教程——WiFi的搜尋和連線

在上一篇中我們介紹了WiFi熱點的建立和關閉,如果你還沒閱讀過,建議先閱讀上一篇文章Android WiFi開發教程(一)——WiFi熱點的建立與關閉。 本章節主要繼續介紹WiFi的搜尋和連線。 WiFi的搜尋 /* 搜尋wifi熱點

ESP8266 AT指令開發

我一開始用的是ESP8266-01這個版本,後來因為不穩定所以還了個,現在在玩8266-12F這個版本的模組,剛好到了放假,花點時間寫點東西給我的朋友們和學弟學妹,也希望對剛接觸這款模組的朋友們有點幫

Android入門熟悉androidstudio開發軟體

本章將說明如何在專案中加入各種元件(文字框、按鈕、輸入欄位)、設計使用者介面的各種基本知識、示範使用簡單的方式編寫程式,建立具有互動效果的程式邏輯。 (一)Android App主要組成 Android App程式主要由4種類型組成: 1.Activity

ESP8266 AT指令開發

通過51微控制器、Arduino等實現AT指令配置8266模組,主要是通過串列埠通訊實現的,博主學校的時候用的是51微控制器給8266配置,arduino等原理相同,但是通過這種方法配置8266不是很穩定,會出現莫名重啟等錯誤,也有可能是我外圍電路沒有去設計的原因。 本次主

基於 abp vNext 和 .NET Core 開發部落格專案 - 部落格介面實戰

## 系列文章 1. **[基於 abp vNext 和 .NET Core 開發部落格專案 - 使用 abp cli 搭建專案](https://www.cnblogs.com/meowv/p/12896177.html)** 2. **[基於 abp vNext 和 .NET Core 開發部落格專案

Hyperledger fabric-SDK-GO客戶端開發

# Hyperledger fabric-SDK-GO客戶端開發篇(六) Fabric-SDK-GO是提供的Go語言開發包,應用程式可以利用Fabric-SDK-GO與fabric網路進行互動並訪問鏈碼。 軟體開發包地址:https://github.com/hyperledger/fabric-sdk

遠程協助開發總結

控制 amp 為什麽不能 username 開發 col dsc exce nec 遠程協助開發的過程中繼續總結 針對開發總結一的問題,改正了一些地方 1.圖像和命令采用兩個套接字,為什麽不能采用一個套接字?遠程協助是快頻的通信,圖像需要不間斷的從受控端發送到控制端,發送接

J2SE核心開發實戰——字符串與包裝類

刪除 i++ cnblogs amp 分支語句 核心 最大 用途 else 字符串與包裝類 一、實驗簡單介紹 在本章。我們將學習一些用於處理字符串的API以及包裝類的相關知識。 本章知識點 字符串API 包裝類及其應用 二、認識字符

類型本質---進階編程

自身 string rand 方法 什麽 ldo 一個數 實例化 xpl   我們在學習一門新的編程語言時,永遠都繞不開變量類型和控制語句,這兩大塊是一個程序的基本構成方式,而且我們也知道構成計算機數據的一切本質其實都是0和1,比如你運行的程序是0和1組成的,你播放的一首歌

Dji Mobile SDK 基礎實現

stat one 透傳 pub != exceptio rom tick ann Dji Mobile SDK 基礎實現(二) 本文簡要介紹如何通過調用DJI Mobile SDK,實現獲取和釋放無人機的控制權限、模擬遙控器按鈕控制無人機的飛行、獲取無人機的回傳視頻、獲取

微信公眾平臺開發教程 基本原理及消息接口

username 普通用戶 縮放 地理位置 cfb 位置 註意 獲得 基本 一、基本原理 在開始做之前,大家可能對這個很感興趣,但是又比較茫然。是不是很復雜?很難學啊? 其實恰恰相反,很簡單。為了打消大家的顧慮,先簡單介紹了微信公眾平臺的基本原理。 微信服務器就相當於一個轉

Java面試-數據庫

全部 exe 並不會 數據頁 .com 元組 www 每次 方式 準備Java面試期間所見到的面試題和自己的整理歸納(僅供我個人學習使用的資料) 1. 主鍵 超鍵 候選鍵 外鍵 主 鍵: 數據庫表中對儲存數據對象予以唯一和完整標識的數據列或屬性的組合。一個數據列只

python分布式爬蟲搭建開發環境

back col 性能 16px 動態網頁 網頁 ebs {} 常見類 scrapy 優勢: resquests和Beautifulsoup都是庫,scrapy是框架 scrapy框架可以加入前兩項 scrapy基於twisted,性能是最大的優勢 scrapy方便擴展,

linux學習之進程

通過 passwd 查看 現在 替換 cnblogs exe -1 stdio.h 進程原語 1.fork #include<unistd.h> pid_t fork(void);   fork   子進程復制父進程,子進程和父進程的PID是不一樣的,在

面向對象

這就是 cti spa arr 指向 完整 一個 demo easy 那麽怎麽來寫一個面向對象的程序呢?先別急 我們先說一下面向對象的組成 1,屬性:對象下面的變量,我們叫做屬性 2,方法:對象下面的函數,我們叫做方法 我們來看一個例子 var arr = []; arr