ESP8266基于MinGW32开发

Esp8266开发环境大致分为两种:

  • Arduino for esp8266
  • ESP8266 SDK

本文介绍基于ESP8266 SDK的开发方式

SDK的开发方式分为不带操作系统(None-RTOS)和带操作系统(RTOS),不带操作系统已经不再开发新的功能,带操作系统的SDK还在维护中。

1、开发工具链安装

1.1 下载编译环境MSYS32(Windows下虚拟linux环境)

链接地址:https://dl.espressif.com/dl/esp32_win32_msys2_environment_and_toolchain-20181001.zip

1.2 解压缩至自定义文件夹下

**注意:本文件夹下及包含自上一层在文件夹名称均不得含有任何非法字符(最好是只有英文字母)**,不然会出现特定错误。

image

1.3 下载Esp8266编译链工具

链接地址:https://dl.espressif.com/dl/xtensa-lx106-elf-gcc8_4_0-esp-2020r3-win32.zip

1.4 解压到msys32的opt目录下

image

1.5 下载乐鑫SDK

  1. 打开msys32目录下的mingw32.exe
    image

  2. 窗口中的当前目录在Home文件夹的账户目录中
    如下图:
    image
    image

  3. 自定义一个文件夹,本人创建的是esp目录,然后在此目录拉取乐鑫的SDK(不要使用下载,否则组件不全)

cd ~ //进入账户根目录命令
 
mkdir esp //创建一个esp目录
 
cd esp //进入esp目录

//从git上克隆带RTOS的SDK。
git clone https://github.com/espressif/ESP8266_RTOS_SDK.git

image

Github会出现网络不通畅导致克隆有缺失或者错误,本人已在百度网盘分享最新版本(2022-06-27 14:00:35 星期一),地址链接如下:
链接:https://pan.baidu.com/s/1I3kFBSAu42wWJY6kpIboNw
提取码:9999

2、配置ESP8266的编译环境

2.1 打开msys32目录下的home/$username/

image

使用文本编辑器(VSCode、Notepad++)编辑修改.bashrc最后一行新增如下图内容
image

#此处复制(本行不需要复制,复制下面2行内容即可)
export IDF_PATH="$HOME/esp/ESP8266_RTOS_SDK/"
export PATH="$PATH:/opt/xtensa-lx106-elf/bin/"

基本上不用改动,但仍要根据实际进行修改,注意一下目录的名称是否正确即可

2.2 保存退出,重新打开msys32

3、编译示例工程

RTOS的SDK自带了一个example

3.1 配置menuconfig

cd ~/esp/ESP8266_RTOS_SDK/examples/get-started/hello_world

make menuco
  1. 进入Serial flasher config目录,选择Default serial port,输入串口号(自行在Windows设置管理器中查询串口号

image
image
image
2. 配置完成,保存,退出menuconfig

3.2 编译example

make menuconfig # 配置工程
make clean   # 清除工程
make all     # 只编译
make flash   # 编译后烧录
make monitor # 开启串口监听
ctrl+}       # 退出串口监听
make app     # 只构建app
amke app-flash # 只烧录app

4、ESP8266下载准备

将IO0接地,重启即可进入下载模式

下载完后将IO0悬空,重启即可开始运行程序

为什么ESP8266波特率是74800?
74800是设备上电日志打印的波特率,如果想更改下面的倒计时等数据打印的波特率可以在工程中添加串口波特率初始化代码即可,如下:

#include "driver/uart.h"//导入串口头文件

uart_set_baudrate(UART_NUM_0,115200);//初始化波特率为115200

 #include <stdio.h>
 #include "freertos/FreeRTOS.h"
 #include "freertos/task.h"
 #include "esp_system.h"
 #include "esp_spi_flash.h"
 #include "driver/uart.h"//导入串口头文件
 void app_main()
 {
     uart_set_baudrate(UART_NUM_0,115200);//初始化波特率为115200
     printf("Hello world!");//输出程序员的标准问好
     //芯片信息
     esp_chip_info_t chip_info;
     esp_chip_info(&chip_info);
     printf("This is ESP8266 chip with %d CPU cores, WiFi,",chip_info.cores);
     printf("silicon revision %d, ", chip_info.revision);
     //flash信息,大小和类型(外部)
     printf("%dMB %s flash", spi_flash_get_chip_size() / (1024 * 1024),(chip_info.features & CHIP_FEATURE_EMB_FLASH) ? "embedded" : "external");
     //使用freertos计时函数倒计时
     for (int i = 10; i >= 0; i--) {
         printf("Restarting in %d seconds...", i);
         vTaskDelay(1000 / portTICK_PERIOD_MS);
     }
     printf("Restarting now.");
     fflush(stdout);//刷新输出
     esp_restart();//重启
 }
posted @ 2022-06-27 14:24  登云上人间  阅读(94)  评论(0)    收藏  举报