ESP8266物联网套件学习

物联网

简介

物联网 == Internet of things【IOT】

注: Intenet 的 I 是大写,
internet = 互连网 将计算机网络互连的任意网络,不一定遵循TCP/IP协议组的通信规则
Internet = 使用TCP/IP协议族作为通信规则的特殊互连网(即互联网)

物联网最重要的属性,就是将设备接入互联网
例:两个设备使用2.4G模块,进行无线通信,这不算为【物联网】
多个设备接入wifi路由器,在局域网内传输数据,这不算为【物联网】
因为虽然设备实现了【物联】,但是没有实现设备接入【互联网】,所以不能称之为【物联网】

设备接入互联网的作用:
设备接入互联网后,可以将数据上报给物联网平台,也可以接受物联网平台的指令。

物联网通信方式

ESP8266物联网套件学习
ESP8266物联网套件学习
2.将SDK包中的driver_lib重命名为app
ESP8266物联网套件学习
选择替换
ESP8266物联网套件学习
将third_party目录中的makefile文件修改为makefile.bak
ESP8266物联网套件学习
导入刚刚配置的SDK包
ESP8266物联网套件学习
4)尝试编译成功
ESP8266物联网套件学习

ESP8266程序下载

ESP-12F模组外部Flash = 4MB = 4096KB = 32Mbit
4MB Flash = 0x000 000 ~ 0x3FF FFF
扇区编号:0x000 ~ 0x3FF 【Flash扇区 = 4KB】

ESP8266物联网套件学习
文件的下载地址
ESP8266物联网套件学习
点击下载,下载工具提示下载完成,开发板按RESET键即可。

GPIO00 = 1、GPIO02 = 1、GPIO15 = 0 ->程序运行模式
GPIO00 = 0、GPIO02 = 1、GPIO15 = 0 ->串口下载模式

注意点:

ESP8266物联网套件学习

ESP8266程序架构

ESP8266物联网套件学习
ESP8266物联网套件学习

4)在user_main.c文件中初始化

注:
软件定时器接口位于ESP8266_NONOS_SDK/include/osapi.h。上述使用的定时器是由软件实现,定时器的函数在任务中被执行。因为任务可能被中断或者被其他高优先级的任务延迟,因此os_timer系列的接口并不能保证定时器精确运行,精准的定时器要硬件定时器。

ESP8266的硬件定时器

1)将ESP8266_NONOS_SDK/driver_lib/driver/hw_timer.c文件放到自建工程的app/driver/目录下
2)硬件定时回调函数

3)硬件定时器初始化

ESP8266的用户任务

无操作系统的SDK并不能像有操作系统的SDK那样支持任务调度,无操作系统的SDK中使用四种类型的函数:
应用函数;回调函数;用户任务;中断服务程序
其中无操作系统的SDK中用户任务最多设三个优先级:0,1,2。任务优先级为2>1>0

函数与任务的区别:
调用函数:立即进入该函数,执行函数语句,实现函数功能
安排任务:给系统安排任务,当系统空闲时,才会执行任务

使用system_os_post()API给系统安排任务时
参数2(消息类型)传递给任务函数形参->sig
参数3(消息参数)传递给任务函数形参->par

调用任务时需给出任务参数(参数1:任务等级;参数2:消息类型;参数3:消息参数)
不论系统是否还有未完成的任务,用户都可以继续安排任务(任务可叠加),当系统空闲时会依次执行任务函数。

注:任务虽然可以叠加,但是叠加次数不能超过设定值(消息队列深度)。超过设定值(消息队列深度)的任务将被丢弃

创建系统任务API

给系统安排任务API

例程

ESP8266读写外部Flash

ESP-12F模组的外部Flash,除了存储系统程序,系统参数外,还可以用来存储用户数据,复位/掉电也不会丢失用户数据

ESP-12F模组的外部Flash = 32Mbit = 4MB
Flash_4MB的地址 = 0x000 000 ~ 0x3FF FFF
扇区编号 = 0x000 ~ 0x3FFF[一个扇区4KB]

注意:
读/写Flash的地址,不能和系统程序区冲突,可以放在[0x70 000]地址后
Flash读写,必须[4字节]对齐
向Flash某扇区写数据前,必须将此扇区擦除,Flash参数函数的参数 [扇区编号]
读写Flash数据函数的参数 [字节地址] (扇区编号*扇区大小4096)

Flash相关API

查询SPI FLASH的IDuint32 spi_flash_get_id(void)擦除Flash扇区SpiFlashOpResult spi_flash_erase_sector(uint16 sec)写数据到FlashSpiFlashOpResult spi_flash_write(uint32 des_addr,uint32 *src_addr,uint32 size)//uint32 des_addr:写入Flash目的地址//uint32 *src_addr:写入数据指针//uint32 size:数据长度,单位byte,必须4字节对齐进行读写从Flash读数据SpiFlashOpResult spi_flash_read(uint32 src_addr,uint32 *des_addr,uint32 size)//uint32 src_addr:读取Flash目标地址//uint32 *des_addr:读取数据指针//uint32 size:数据长度,单位byte,必须4字节对齐

来源:wuli_Thames

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年7月7日
下一篇 2022年7月7日

相关推荐