GithubHelp home page GithubHelp logo

angelliang / esp8266-demos Goto Github PK

View Code? Open in Web Editor NEW
223.0 19.0 93.0 1.26 MB

ESP8266示例工程集合

License: MIT License

Makefile 4.42% C 90.43% Batchfile 2.16% Shell 2.44% C++ 0.43% Python 0.13%
esp8266 demo espressif

esp8266-demos's Introduction

ESP8266-Demos

ESP8266示例工程集合,基于ESP8266_NONOS_SDKv3.0.0。

使用指南

建议把本仓库当作一个代码实现参考的地方,有需要即可拷贝移植。也可以用O00-empty_app空白工程作为基础模板,需要什么功能再进行添加。

系列说明

D系列:与编码(Decode)相关的demo,加密和哈希相关的也会放在这里。

序号 工程名称 说明
D01 cjson_app 使用cJSON示例
D02 base64_app base64编码示例
D03 md5_app ESP8266使用MD5进行Hash

H系列:与ESP8266片上硬件(Hardware)资源相关的demo,部分demo会有外设使用实例。

序号 工程名称 说明
H01 gpio_app 定时设置GPIO和GPIO的中断处理函数
H02 iic_app IIC使用示例
H03 spi_app SPI使用示例,支持HARD_SPI和SOFT_SPI
H04 adc_app 定时读取ADC数值
H05 hw_timer_app ESP8266使用硬件中断定时器示例
H06 ir_app IR接口示例
H07 uart_app UART回显示例

N系列:与ESP8266网络(Network)相关的demo。

序号 工程名称 说明
N00 speed_test_app ESP8266 TCP/UDP速率测试
N01 tcp_ssl_client_app TCP和SSL客户端示例
N02 tcp_udp_server_app TCP和UDP服务器示例
N03 http_client_app ESP8266作为http client示例
N04 coap_app  搭建一个简单的CoAP Server
N05 sntp_app SNTP使用示例工程
N06 esp_now_app ESP-NOW使用示例,分为slave和controller两部分
N07 smartconfig_app 简单SmartConfig示例
N08 smartconfig_wifi_app 上电先SmartConfig,一段时间后WiFi连接
N09 sniffer_app sniffer使用示例
N10 wifi_event_cb_app 连接Wi-Fi后回调事件功能
N11 multiudp_server_app UDP多播
N12 mqtt_app MQTT client 实例,基于官方SDK example下面的esp_mqtt_proj工程

O系列:其他(Other)demo,未分类的都放在这里。

序号 工程名称 说明
O00 empty_app 空白工程
O01 upgrade_app 远程更新固件示例
O02 lwip_open_src_template_proj 官网提供的lwip示例工程,添加了一些个人示例代码

部分app文件夹下有说明文件(README.md)和效果图(screenshot)。

本人所用的开发环境

使用步骤

  1. 首先到github或者官网下载SDK;

  2. 然后下载并拷贝相关工程文件夹(比如cjson_app)到主目录,用法类似于ESP8266_NONOS_SDK/examples里面的工程;

  3. ESP8266 IDE导入该SDK,,如果不熟悉该环境,参考这里

  4. 使用SDKv3.0.0还需要修改该SDK的顶层Makefile。编辑器打开该SDK的顶层Makefile( https://github.com/espressif/ESP8266_NONOS_SDK/blob/master/Makefile#L29 ),找到下面配置变量,修改SPI_SIZE_MAP为4(如果是使用32Mbit Flash)。

    # ...
    # 25行
    BOOT?=none
    APP?=0
    SPI_SPEED?=40
    SPI_MODE?=QIO
    SPI_SIZE_MAP?=4	

    如果不修改,后面编译会报下面错误:

    #error "The flash map is not supported"
    
  5. 最后编译下载即可(建议先clean)。

project_sample

烧写bin

这一步对新手来说可能坑比较多。可参考安信可的烧写步骤,也可参考我ESP8266-Demos仓库里wiki的烧写说明(目前待完善)。

对老手来说,平时怎么烧写就怎么烧写。

注意事项

  • 关于串口波特率

    ESP8266串口波特率打印默认为74800bps。

  • 关于中文乱码

    因为源码文件编码默认为UTF-8,而Windows Eclipse IDE默认为GBK,所以可能需要设置一下:

    菜单栏Window -> Preferences -> General -> Workspace -> 面板Text file encoding -> 选择UTF-8 -> OK

基于SDKv2.0.x的app移植到SDKv3.0.0步骤说明

环境同样还是安信可 ESP 系列一体化开发环境,只不过是把原本基于ESP8266_NONOS_SDKv2.x.x的app兼容到SDKv3.0.0。

第一步:下载SDKv3.0.0

到乐鑫官方的github下载SDK:

https://github.com/espressif/ESP8266_NONOS_SDK

第二步:导入该SDK到IDE

这个就不赘述了。

第三步:修改该SDK的顶层Makefile

编辑器打开该SDK的顶层Makefile,找到下面配置变量,修改SPI_SIZE_MAP为4(如果是使用32Mbit Flash)。

# ...
# 25行
BOOT?=none
APP?=0
SPI_SPEED?=40
SPI_MODE?=QIO
SPI_SIZE_MAP?=4

第四步:修改user_main.c文件

我参考了SDKv3.0.0的examples/IoT_Demo/user_main.c代码,并根据官方文档的说明。使SDKv2.x的app能兼容SDKv3.0.0,仅仅是需要拷贝下面代码到user_main.c即可:

#if ((SPI_FLASH_SIZE_MAP == 0) || (SPI_FLASH_SIZE_MAP == 1))
#error "The flash map is not supported"
#elif (SPI_FLASH_SIZE_MAP == 2)
#define SYSTEM_PARTITION_OTA_SIZE                           0x6A000
#define SYSTEM_PARTITION_OTA_2_ADDR                         0x81000
#define SYSTEM_PARTITION_RF_CAL_ADDR                        0xfb000
#define SYSTEM_PARTITION_PHY_DATA_ADDR                      0xfc000
#define SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR              0xfd000
#define SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM_ADDR           0x7c000
#elif (SPI_FLASH_SIZE_MAP == 3)
#define SYSTEM_PARTITION_OTA_SIZE                           0x6A000
#define SYSTEM_PARTITION_OTA_2_ADDR                         0x81000
#define SYSTEM_PARTITION_RF_CAL_ADDR                        0x1fb000
#define SYSTEM_PARTITION_PHY_DATA_ADDR                      0x1fc000
#define SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR              0x1fd000
#define SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM_ADDR           0x7c000
#elif (SPI_FLASH_SIZE_MAP == 4)
#define SYSTEM_PARTITION_OTA_SIZE                           0x6A000
#define SYSTEM_PARTITION_OTA_2_ADDR	                        0x81000
#define SYSTEM_PARTITION_RF_CAL_ADDR                        0x3fb000
#define SYSTEM_PARTITION_PHY_DATA_ADDR                      0x3fc000
#define SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR				0x3fd000
#define SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM_ADDR           0x7c000
#elif (SPI_FLASH_SIZE_MAP == 5)
#define SYSTEM_PARTITION_OTA_SIZE							0x6A000
#define SYSTEM_PARTITION_OTA_2_ADDR							0x101000
#define SYSTEM_PARTITION_RF_CAL_ADDR						0x1fb000
#define SYSTEM_PARTITION_PHY_DATA_ADDR						0x1fc000
#define SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR				0x1fd000
#define SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM_ADDR           0xfc000
#elif (SPI_FLASH_SIZE_MAP == 6)
#define SYSTEM_PARTITION_OTA_SIZE                            0x6A000
#define SYSTEM_PARTITION_OTA_2_ADDR                          0x101000
#define SYSTEM_PARTITION_RF_CAL_ADDR                         0x3fb000
#define SYSTEM_PARTITION_PHY_DATA_ADDR                       0x3fc000
#define SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR               0x3fd000
#define SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM_ADDR            0xfc000
#else
#error "The flash map is not supported"
#endif

#define SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM                SYSTEM_PARTITION_CUSTOMER_BEGIN

uint32 priv_param_start_sec;

static const partition_item_t at_partition_table[] = {
    { SYSTEM_PARTITION_BOOTLOADER, 						0x0, 												0x1000},
    { SYSTEM_PARTITION_OTA_1,   						0x1000, 											SYSTEM_PARTITION_OTA_SIZE},
    { SYSTEM_PARTITION_OTA_2,   						SYSTEM_PARTITION_OTA_2_ADDR, 						SYSTEM_PARTITION_OTA_SIZE},
    { SYSTEM_PARTITION_RF_CAL,  						SYSTEM_PARTITION_RF_CAL_ADDR, 						0x1000},
    { SYSTEM_PARTITION_PHY_DATA, 						SYSTEM_PARTITION_PHY_DATA_ADDR, 					0x1000},
    { SYSTEM_PARTITION_SYSTEM_PARAMETER, 				SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR, 			0x3000},
    { SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM,             SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM_ADDR,          0x1000},
};

void ICACHE_FLASH_ATTR user_pre_init(void)
{
    if(!system_partition_table_regist(at_partition_table, sizeof(at_partition_table)/sizeof(at_partition_table[0]),SPI_FLASH_SIZE_MAP)) {
		os_printf("system_partition_table_regist fail\r\n");
		while(1);
	}
}

第五步:完成,尝试编译烧写吧!

自此,基于SDKv2.x的app已经能在SDKv3.0上编译了。我测试了我的部分示例app,烧写后一切正常工作。

esp8266-demos's People

Contributors

angelliang avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

esp8266-demos's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.