Esp8266學習之旅① 搭建開發環境,開始一個“hellow world”串口打印。


  • 本系列博客學習由非官方人員 半顆心臟 潛心所力所寫,不做開發板。僅僅做個人技術交流分享,不做任何商業用途。如有不對之處,請留言,本人及時更改。

1、 Esp8266之 搭建開發環境,開始一個“hellow world”串口打印。
2、 Esp8266之 利用GPIO開始使用按鈕點亮你的“第一盞燈”。
3、 Esp8266之 利用 "軟件定時器 " 定時0.5秒閃爍點亮一盞LED。
4 、Esp8266之 瞭解PWM,更爲深入地用PWM控制一盞LED的亮度變化。
5 、Esp8266之 原生樂鑫SDK高級使用之封裝Post與Get請求雲端,拿到“天氣預報信息”。
6 、Esp8266之 瞭解 SmartConfig與Airkiss一鍵配網,給8266配網上雲端。無需把wifi名字密碼寫在固件裏。
7 、Esp8266之 瞭解 softAP熱點配網模式原理,仿“機智雲”定義自己的熱點配網模式協議。
8、 Esp8266之 你要找的8266作爲UDP、TCP客戶端或服務端的角色通訊,都在這了。
9、 Esp8266進階之路: [小實戰上篇]Windows系統搭建8266的本地Mqtt服務器,局域網點亮一盞LED燈。
10、 Esp8266進階之路: [小實戰下篇]Windows系統搭建8266的本地Mqtt服務器,局域網點亮一盞LED燈。
11、 Esp8266進階之路: 8266接入阿里智能,點亮一盞LED燈,期待天貓精靈語音控制的不約而至!
12、 Esp8266進階之路: 圖文並茂學習阿里雲主機搭建8266MQTT服務器,實現移動網絡遠程控制一盞LED。
13、 Esp8266進階之路: 動手做個8266畢設小案例,smartConfig + MQTT協議輕鬆實現遠程控制一盞LED。
14、 Esp8266進階之路: esp8266的 FreeRtos系統學習的正確姿勢 ------ 環境搭建、燒錄。
15、 Esp8266進階之路: esp8266的 物聯網又一股清流,8266接入阿里雲平臺非阿里智能的SDS服務,點亮一盞LED燈。
16、 Esp8266進階之路: esp8266的 基於Nonos移植紅外線H1838,實現紅外遙控器配網,遠程控制一盞燈。
17、 Esp8266進階之路: esp8266自研的快速上電開關五次 (開-關爲一次) ,無需按鍵觸發則8266進去一鍵配網模式。
18、 Esp8266進階之路: esp8266 基於NONOS 實現 OTA 遠程升級,實現無線“ 熱修復 ”升級固件程序。
19、 Esp8266進階之路esp8266驅動 ds18b20、dht11 溫溼度傳感器,採集溫溼度傳感器到服務器。
20、 Esp8266進階之路深入學習esp8266的esp now模式,仿機智雲做一個小網關,實現無需網絡下輕鬆彼此連接通訊交互數據。
21、 Esp8266進階之路淺談 esp8266 如何在本地局域網網絡情況下實現最大效率地和前端實現數據交互。
22、 Esp8266進階之路esp8266的工程如何添加第三方靜態庫文件以及如何自定義文件夾,聊聊那些makeFile的事。。
23、 Esp8266進階之路再來一波 esp8266 基於 freeRtos系統連接自己私有的服務器實現OTA遠程升級,接觸下 lwip的基本知識。。
24、 Esp8266進階之路滲透學習回顧下esp8266的外置spi芯片25q系列,熟悉8266代碼塊在其的分佈,得心應手放置圖片或其他資料。
25、 Esp8266進階之路深聊下esp8266的串口 Uart 通訊中斷編程,爲您準備好了 NONOS 版本 和 RTOS 系統的串口驅動文件。
26、 Esp8266進階之路RTOS分析 MQTT 實現過程,實現移植 MQTT協議在 esp8266 rtos實時系統,可斷線重連。
27、 Esp8266進階之路跟緊腳步,用VisualStudio Code開發 esp8266 rtos SDK v3.0版本,全新的 idf 框架,節省內存模塊化開發。
28、 Esp8266進階之路教你輕鬆自如使用cJson在樂鑫 esp8266 如何解析一段json數據以及如何生成一段json數據。
29、 Esp8266進階之路百萬條消息免費之樂鑫esp8266使用TCP直連模式MQTT協議接入阿里雲物聯網平臺,支持私家服務器對接支持阿里雲規則引擎。
30、 Esp8266進階之路樂鑫esp8266 SDK編程使用 IIC總線驅動 0.96寸的OLED顯示屏,顯示天氣預報信息。
31、 Esp8266進階之路當esp8266遇到 Html,該怎麼內置網頁控制設備,理清內置網頁的實現過程,實現無需路由器手機也可以控制esp8266。
32、 Esp8266進階之路細聊HmacMD5的加密方法帶來的安全性,並實踐在esp8266上,最大保障傳輸的過程的信息的安全性。
33、 Esp8266進階之路如何優雅地像樂鑫原廠封裝esp8266底層寄存器的邏輯思維,做成自己的靜態庫庫文件,讓第三方人使用?
34、 Esp8266進階之路樂鑫esp8266 NONOS SDK 3.0編程使用 SPI 驅動基於Max7219芯片的八位數碼管,顯示日期信息。
35、 Esp8266進階之路樂鑫esp8266芯片藉助機智雲平臺做一個商業化的七彩RGB燈泡可調整體方案項目,炫彩奪目高大尚。
36、 Esp8266之rtos3.0筆記認識esp8266 Rtos 3.0 sdk 工程結構,esp8266如何向esp-idf工程靠近的,如何自定義頭文件編譯?
37、 Esp8266之rtos3.0筆記你要找的基本外設功能都在這裏了,包括Gpio、Pwm 和 Uart 接口使用。
38、 Esp8266之rtos3.0筆記 一篇文章帶你搞掂存儲技術 NVS 的認識和使用,如何利用NVS保存整型、字符串、數組以及結構體。
39、 Esp8266之rtos3.0筆記 捋一捋微信公衆號配網智能設備 esp8266 並綁定設備的過程,移植併成功實現在 esp8266 rtos3.1 。
40、 Esp8266之rtos3.0筆記 基於樂鑫idf框架,研究出超穩定、掉線重連、解決內存泄露問題的Mqtt框架!支持esp8266和esp32!
41、 Esp8266之rtos3.0筆記 esp8266-12模塊基於rtos3.1版本ota功能遠程空中升級固件,官網基礎之上增加dns域名解析!
42、 Esp8266之rtos3.0筆記 我又來了,基於rtos3.0版本 SDK編程 SPI 驅動 ws2812b 七彩燈,代碼全部開源奉獻給你們!
43、 Esp8266之rtos3.0筆記 esp8266-12模塊基於rtos3.0版本掃描周圍獲取附近可用的 Wi-Fi 熱點路由器信息,同樣適合esp32。
44、 Esp8266之rtos3.0筆記 整理分享那些我在項目中常用的esp8266 rtos3.0版本的常見驅動,Button按鍵長短按、PWM平滑調光等。
45、 Esp8266之rtos3.0筆記 內置僅1M的Esp8285,如何攻破最棘手的OTA問題,大大節省資源成本開發產品。
46、 Esp8266之rtos3.0筆記 詳細分析Esp8266上電信息打印的數據,如何做到串口通訊上電不亂碼打印。
47、 Esp8266之rtos3.0筆記 無需外網,如何實現在本地局域網與控制端做數據交換的一些開發經驗。
48、 Esp8266之rtos3.0筆記 遲來的1024程序員祝福,開源分享一個驅動 ds18b20 獲取溫度的工程。
49、 Esp8266之rtos3.0筆記 aliyun sdk 直連接入阿里雲物聯網平臺,實現天貓精靈找隊友零配網功能和語音控制。
50、 Esp8266之rtos3.0筆記 esp產品量產方案初入門之 如何從外部讀取 csv 文件的數據,比如從代碼讀取外部文件阿里雲三元組。
-------- 學習筆記持續更新,歡迎關注我…

很多人怎麼聯繫我一起學習進步,下面打個小小公告:
玩轉esp8266帶你飛、加羣QQ羣,提高門檻,不喜的朋友勿噴勿加:434878850
esp8266源代碼免費學習彙總(持續更新,歡迎star):https://github.com/xuhongv/StudyInEsp8266
esp32源代碼免費學習彙總(持續更新,歡迎star):https://github.com/xuhongv/StudyInEsp32


文章目錄

一、認識其本質與搭建開發環境。


1.1 、 市面上無線模塊有哪些。


大家可知道目前的無線通信模塊有哪幾種? 主要有Wifi無線通訊BlueTooth藍牙ZigBee,目前大多都是前二者,ZigBee現在用的很少了。據我所推斷的,未來是屬於物聯網世界、智能家居領域,而藍牙和zigbe侷限於範圍,藍牙4.0僅僅最大支持100米,zigbee就不說了。


1.2 、wifi模塊Esp8266發展。


2015年物聯網處於爆發的一年,樂鑫的ESP8266WIFI 芯片成爲強烈的催化劑。成功的將2014年前的40以上的WIFI成本壓縮到現在的10元左右。內置WIFI前端和高性能的32位MCU,基本引爆物聯網市場,幾乎牽扯到電子的行業,都可以用上,比如WIFI開關 燈具 WIFI定位 電飯鍋 空氣淨化器 等消費類小家電與大家電,都面臨這一場技術革新,與新的用戶體驗!比如你僅僅增加10元的成本就可以把自己的產品被手機控制了。


1.3 、Esp8266特點。


  • 要知道,在物聯網世界裏面的牛人,沒有誰不認識 8266 。既然如此出色,那肯定有他存在的必然理由:

    • 低功耗、高集成度的 Wi-Fi 芯片。

    • 最小系統僅需 7 個元器件

    • 超寬工作溫度範圍:-40°C 至 +125°C

    • ESP8285 : ESP8266 內封 8 Mbit Flash。

    • ESP8266EX 有三種運行模式:激活模式、睡眠模式和深度睡眠模式,能夠延長電池壽命。


1.4 、搭建開發環境。


方式1,利用安信可一體化環境【新手推薦

  • esp8266 經過這麼多年的迭代,sdk從1.0到目前的 3.3版本,也有2種C語言開發方式:裸跑 nonos 以及 實時操作系統 freeRtos 的支持,安信可公司一直在着樂鑫步伐跟着走,推出了 前1.0版本1.0版本
  • 其中 前1.0版本 僅僅支持 2.0版本及以下,而 1.0版本支持3.0或以上。
  • 教程參考官網教程:添加鏈接描述

方式2,自主搭建環境【支持 rtos和nonos】:

  • 環境搭建大家應該都幾乎是選擇 windows 的,作爲一個老司機,和大家一樣,我也是選擇爲 win10 的筆記本電腦遊戲本,cpu i8 ,16g內存!
  • 下面我就以 windows 平臺爲大家搭建一個可以手動同步最新編譯工具鏈、以及可編譯 非操作系統nonos工程和 操作系統Rtos工程的代碼,下面是搭建環境的三件套:
    • esp8266最新的編譯工具鏈下載傳送門(仔細看下面的截圖): https://github.com/espressif/ESP8266_RTOS_SDK
    • 2019年的eclipse c++編輯器下載,請關注我的微信公衆號後回覆 8266環境搭建 或者羣文件獲取即可!
    • 感謝安信可提供的 window cywin 環境,下載可在我的微信公衆號後回覆 8266環境搭建 或者羣文件獲取即可!

在這裏插入圖片描述


  • 待我們的三件套下載了之後,首先第一步是解壓,注意是用WinRAR軟件以管理員身份解壓,可以得到完整的文件夾,其他解壓軟件有可能會得到不完整的壓縮包!
  • 下面我們先設置下cywin和編譯工具鏈的環境變量,注意替換爲您的實際路徑,如下:
    • E:\Espressif\IDE\AiThinkerIDE_V0.5\AiThinkerIDE_V0.5\cygwin\bin\
    • E:\Espressif\IDE\xtensa-lx106-elf\bin\

在這裏插入圖片描述


  • 下面是我們的編輯器的打開,注意 eclipes的打開必須事先自行搭建 java 環境,因爲eclipse是用 java開發的 !等你可以成功打開界面如下,說明您已經完成了一大半了!

在這裏插入圖片描述



二、開始我們基於 nonos 工程的第一個“Hello World”。


第一步:打開我們最新的NONOS的SDK下載地址:https://github.com/espressif/ESP8266_NONOS_SDK ,解壓後請注意以下操作:
  • ①、driver_lib文件夾下面的Makefile文件刪除!
  • ②、整個third_party去掉,這是第三方的demo,我們很少用!
  • ③、把example文件夾下面的任意一個工程,比如smart_config複製到主目錄(逼問主目錄就是下載壓縮包壓縮後的目錄),可重命名爲app,或者不修改!
  • ④、以上做好了之後,可以導入IDE了!

我這裏演示一個串口實驗,打印 hellow world字符到我們通訊串口助手。下載後解壓,注意解壓後的路徑千萬別帶中文字符,解壓請直接複製到一個沒有中文字符的路徑的文件夾下面。否則會影響到後面的編譯結果!


第二步:導入項目 選擇 File→Import ,下面步驟:

在這裏插入圖片描述


第三步:點開C/C++分支,並選中Existing Code as Makefile Project:

在這裏插入圖片描述


第四步:去除C++支持,選中 Cygwin GCC,點擊Browser,選中我們解壓後所在的目錄。點擊finish。

在這裏插入圖片描述


第五步:此刻,成功進入到我們的主界面。

第六步:開始編譯工程前,我們裝裝逼,在其的 app ->user --> user_main.c 方法修改如下,讓輸出爲 hello world。
  • 注意:從SDK1.4版本之後,已經移除了下面2個函數,我們只需要在user_init()裏面敲寫即可!
  • esp8266的非實時系統編程的打印函數儘量用os_printf(),切記切記!!!

void user_init(void) {
	os_printf("hello world");
}


第七步:開始編譯前,按照官方的說法,我們看控制檯時候,直接把 Problems 欄目關掉,解釋說,這個Problems 欄目報的錯誤不準確,只有Console 欄目下的輸出爲準,所以建議大家把 Problems 欄目關閉。
  • 之後建議大家每次編譯項目前先進行 clear project,再 build project ,這樣就保證了正確的代碼可以完全被編譯,如果正確的代碼沒有clear project就直接build project ,可能會報錯。

  • Build Project :編譯項目 ; Clean Project:清理項目,可以清理下緩存。


關閉problem欄


先clear再build


第八步:我們編譯之後,看看控制檯下的信息打印,說明已經成功做好固件啦。:

這裏寫圖片描述


  • 第三處修改:需要在project_template的Makefile裏添加指定的SDK的路徑。千萬忘記了結尾的”/”。否則編譯還是會找不到路徑,比如我的工程路徑爲:C:\Project8266\8266All\8266ProjectCSDN\16_ESP8266_RTOS_SDK_V1.5.0

export SDK_PATH = /cygdrive/C/Project8266/8266All/8266ProjectCSDN/16_ESP8266_RTOS_SDK_V1.5.0/
export BIN_PATH = /cygdrive/C/Project8266/8266All/8266ProjectCSDN/16_ESP8266_RTOS_SDK_V1.5.0/bin/

  • 開始編譯之後,便可看到console控制檯輸出如下,恭喜成功編譯!

三、基於 rtos 如何打開運行一個工程。


  • 第一處修改:此rtos工程導入和安信可的導進就是一模一樣的,但是需要修改的是指定的工程編譯目錄 , 拿我github上的一個rtos工程,其編譯目錄爲project_template, 所以需要修改如下:

在這裏插入圖片描述


  • 第二處修改:修改編譯指令,還記得我們的rtos編譯時候需要選擇一些選項嗎?比如是user1.bin還是user2.bin。這裏的話,我們需要手動的編輯此編譯的指令:(下面的指令是生成可升級的user1.bin的32Mbit的8266模塊,對應我們的8266-12f模塊)
COMPILE=gcc BOOT=new APP=1 SPI_SPEED=40 SPI_MODE=QIO SPI_SIZE_MAP=6

在這裏插入圖片描述


  • 開始編譯之後,便可看到console控制檯輸出如下,恭喜成功編譯!

    bin crc: 1b65b8de
    Support boot_v1.4 and +
    Generate user1.4096.new.6.bin successully in BIN_PATH
    boot.bin------------>0x00000
    user1.4096.new.6.bin—>0x01000
    !!!


在這裏插入圖片描述


四、讓我們燒固件走起。


  • 如果您的8266是沒有最小系統的話(如下),那麼需要自己搭建最小系統來燒固件進去。

這裏寫圖片描述


看我們的最小系統搭建(強調:燒錄時候,一定要讓GPIO0處於低電平,即接GND):


這裏寫圖片描述


  • 讓我們開始燒錄:根據上面第八步的生成的bin文件,我們看見了其燒錄信息:

  • eagle.flash.bin-------->0x00000

  • eagle.irom0text.bin---->0x10000


  • 於是,我們就打開燒錄軟件,配置剛剛的路徑,選擇燒錄地址(選擇之後就是綠色的),各個參數如下:

這裏寫圖片描述


  • 下載完畢之後,我們給設備重新上電,打開串口助手,設置波特率74880:

在這裏插入圖片描述


  • 上面的圖是不是看見很清晰的 hellow world 呀 。

  • 由於 nonos 3.0 以上步驟不可行,則具體操作請訪問我的B站視頻教學:https://www.bilibili.com/video/av40065898

  • 後記:所有自己編譯出來的工程,都是有四個文件要燒錄的,其中2個是必須燒錄的(防止初始化失敗),這2個文件分別是 esp_init_data_default.bin blank.bin,燒錄地址根據您的8266型號區別;

  • 我們最平常用的是安信可8266-12系列的,這個是32Mbit,也就是4M flash ,所以他們的地址分別是 0x3FC000 和 0x3FE000 , 最後2個的燒錄文件地址看編譯之後結果而決定!也即是不一定是0x10000,有可能是0x2000 , 這個根據SDK的版本有關係。所以大家還是留心點!

  • 的好多人問我這個SPI MODE應該怎麼選擇,這個其實是esp8266芯片和flash芯片的連接方式決定的,四根線就是QIO,而DIO就是六根線,至於後面還有QOUTDOUTflash芯片有關,平時最多的是DIO或者是QIO了!

  • 最後一點,本系列博客的NONOS SDK 都是 1.4~2.2的,在今年2018年七月左右,更新到了3.0版本,一些初始化代碼都已經變了,大家入門的話,還是從我的GitHub下載吧。這樣較快地入門學習esp8266;如果您的是最新的3.0或者以上的工程,可能彙報以下錯誤:

user_main.c:45:2: error: #error "The flash map is not supported"
 #error "The flash map is not supported"
  ^
xt-xcc -Os -g -Wpointer-arith -Wundef -Werror -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -ffunction-sections -fdata-sections -fno-builtin-printf  -DICACHE_FLASH -DGLOBAL_DEBUG_ON -DSPI_FLASH_SIZE_MAP=0   -I include -I ./ -I ../include -I ../include/mqtt -I ../include/modules -I ../../include -I ../../include/eagle -I ../../driver_lib/include  -o .output/eagle/debug/obj/user_main.o -c user_main.c
user_main.c:45:2: error: #error "The flash map is not supported"
 #error "The flash map is not supported"
  ^
user_main.c:156:58: error: 'SYSTEM_PARTITION_OTA_SIZE' undeclared here (not in a function)
     { SYSTEM_PARTITION_OTA_1,         0x1000,            SYSTEM_PARTITION_OTA_SIZE},
                                                          ^
user_main.c:157:39: error: 'SYSTEM_PARTITION_OTA_2_ADDR' undeclared here (not in a function)
     { SYSTEM_PARTITION_OTA_2,         SYSTEM_PARTITION_OTA_2_ADDR,       SYSTEM_PARTITION_OTA_SIZE},
                                       ^
user_main.c:158:39: error: 'SYSTEM_PARTITION_RF_CAL_ADDR' undeclared here (not in a function)
     { SYSTEM_PARTITION_RF_CAL,        SYSTEM_PARTITION_RF_CAL_ADDR,       0x1000},
                                       ^
user_main.c:159:40: error: 'SYSTEM_PARTITION_PHY_DATA_ADDR' undeclared here (not in a function)
     { SYSTEM_PARTITION_PHY_DATA,       SYSTEM_PARTITION_PHY_DATA_ADDR,      0x1000},
                                        ^
user_main.c:160:46: error: 'SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR' undeclared here (not in a function)
     { SYSTEM_PARTITION_SYSTEM_PARAMETER,     SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR,    0x3000},
                                              ^

  • 莫急,這是因爲未定義造成的,一般地,根據我們最常用的esp8266-12系列的32Mbit的模塊,那麼只需要在根目錄的Makefile文件的第25行的代碼修改如下,重新編譯即可!!燒錄地址不變!!
BOOT?=new
APP?=1
SPI_SPEED?=40
SPI_MODE?=QIO
SPI_SIZE_MAP?=6


五、上電不跑程序,異常分析。


ESP8266 上電時打印的 boot 模式信息代表什麼?如何改變 boot 模式?

ESP8266 上電時會判斷 boot strapping 管腳的狀態,並決定 boot 模式。例如,ESP8266 上電時打印的 boot 模式信息如下:

ets Jan 8 2013,rst cause:1, boot mode:(3,2)
  • 其中打印的 boot mode 的第一位數字(3)代表當前的 boot 模式。
  • Boot 模式由 strapping 管腳的 3 位值 [GPIO15,GPIO0,GPIO2] 共同決定。如下表所示:
Strapping 管腳的 3 位值 [GPIO15,GPIO0,GPIO2] Boot 模式
7 [1,1,1] SDIO HighSpeed V2 IO
6 [1,1,0] SDIO LowSpeed V1 IO
5 [1,0,1] SDIO HighSpeed V1 IO
4 [1,0,0] SDIO LowSpeed V2 IO
3 [0,1,1] Flash Boot
2 [0,1,0] Jump Boot
1 [0,0,1] UART Boot
0 [0,0,0] Remapping

燒寫失敗定位
確保 boot 模式在 UART boot.

將 ESP8266 撥到燒寫模式,看燒寫口的 log(默認 74880 查看). 正常燒寫應該是 boot mode:(1,n), 其中n任意,第二個參數和 SDIO 相關,不用關心!

看 log 亂碼/無打印定位,確保 boot 模式在 Flash boot!

將 ESP8266 撥到運行模式,看 log 口的輸出. 正常log應該是 boot mode:(3,n),第二個參數和 SDIO 相關,不用關心!

  • 1.確保波特率正確
  • 2.確保無串口占用

另外,不要把我的博客作爲學習標準,我的只是筆記,難有疏忽之處,如果有,請指出來,也歡迎留言哈!

  • 玩轉esp8266帶你飛、加羣QQ羣,不喜的朋友勿噴勿加:434878850
  • esp8266源代碼學習彙總(持續更新,歡迎star):https://github.com/xuhongv/StudyInEsp8266
  • esp32源代碼學習彙總(持續更新,歡迎star):https://github.com/xuhongv/StudyInEsp32
發佈了156 篇原創文章 · 獲贊 821 · 訪問量 83萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章