您的位置:首页 > 大数据 > 物联网

Esp8266学习之旅② 利用GPIO开始使用按钮点亮你的“第一盏灯”。(附带demo)

2017-09-28 18:04 645 查看

欢迎来到物联网智能家居顶量级别wifi模块Esp8266学习之旅。

本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时更改。

①、 Esp8266之 搭建开发环境,开始一个“hellow world”串口打印。

②、 Esp8266 之利用GPIO开始使用按钮点亮你的“第一盏灯”。

③、 Esp8266之 利用 ” 软件定时器 ” 定时0.5秒闪烁点亮一盏LED。

④ 、Esp8266之 了解PWM,更为深入地用PWM控制一盏LED的亮度变化。

⑤ 、Esp8266之 原生乐鑫SDK高级使用之封装Post与Get请求云端,拿到“天气预报信息”。

⑥ 、Esp8266之 了解SmartConfig与AirKiss的一键配网区别,给8266一键配网上云端。

⑦ 、Esp8266之 了解 softAP热点配网模式原理,仿“机智云”定义自己的热点配网模式协议。

⑧、Esp8266之 你要找的8266作为UDP、TCP客户端或服务端的角色通讯,都在这了。

9、 Esp8266进阶之路第一篇: [小实战上篇]Windows系统搭建8266的本地Mqtt服务器,局域网点亮一盏LED灯。

10、 Esp8266进阶之路第二篇: [小实战下篇]Windows系统搭建8266的本地Mqtt服务器,局域网点亮一盏LED灯。

11、 Esp8266进阶之路第三篇: 8266接入阿里智能,点亮一盏LED灯,期待天猫精灵语音控制的不约而至!

12、 Esp8266进阶之路第四篇: 图文并茂学习阿里云主机搭建8266MQTT服务器,实现移动网络远程控制

13、 Esp8266进阶之路第五篇: 动手做个8266毕设小案例,smartConfig + MQTT协议轻松实现远程控制一盏LED。

一、本篇主要介绍的如何利用其管脚获取高低电平与怎么样控制高低电平。

电路原理图:

我们通过按钮S1按下之后,led0就亮,再点击一次就灭。看图我们可看到,开关s1连接的是GPIO02的管脚,而LED灯连接的是GPIO16的管脚。一般来说,我们只要观察S1是否按下就来对灯进行开关。



打开乐鑫的SDK技术文档,我们搜索下管脚GPIO的相关设置:

先选定一个GPIO管脚。用 PIN_FUNC_SELECT(PIN_NAME, FUNC) 函数。比如我选定GPIO14这个管脚,则这样写:PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTMS_U, FUNC_GPIO14);

如果你设置这个管脚为高电平,则这样写:GPIO_OUTPUT_SET(GPIO_ID_PIN(14), 1);

-如果你设置其为读取状态功能则,这样初始化: GPIO_DIS_OUTPUT(GPIO_ID_PIN(14)) ;





二、程序入口:user_main.c 。

#include "driver/uart.h"  //串口0需要的头文件
#include "osapi.h"  //串口1需要的头文件
#include "user_interface.h" //WIFI连接需要的头文件
#include "gpio.h"  //端口控制需要的头文件

void delay_ms(uint16 x)
{
for(;x>0;x--)
{
os_delay_us(1000);
}
}

void  user_init()//初始化
{
uint8 bz=0;

uart_init(57600, 57600);//设置串口0和串口1的波特率

PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTMS_U, FUNC_GPIO14);//选择GPIO14
GPIO_OUTPUT_SET(GPIO_ID_PIN(14), 1);//GPIO14为高

PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U,FUNC_GPIO2);//选择GPIO2
GPIO_DIS_OUTPUT(GPIO_ID_PIN(2)) ; // 设置GPIO2为输入

while(1)
{
system_soft_wdt_feed();//这里我们喂下看门狗  ,不让看门狗复位

if(GPIO_INPUT_GET(GPIO_ID_PIN(2))==0x00)//读取GPIO2的值,按键按下为0
{
delay_ms(20); //延时20MS,去抖
if(GPIO_INPUT_GET(GPIO_ID_PIN(2))==0x00)
{
bz++;
if(bz==2)bz=0;
if(bz==1)GPIO_OUTPUT_SET(GPIO_ID_PIN(14), 0);           //GPIO16为低
if(bz==0)GPIO_OUTPUT_SET(GPIO_ID_PIN(14), 1);           //GPIO16为高

while(GPIO_INPUT_GET(GPIO_ID_PIN(2))==0x00);           //等待按键释放
}
}

}

}

void user_rf_pre_init()
{

}


三、编译与烧录。

每次编译工程之前记得先clear project ,再build project 编译工程,保证生成的bin文件不出错。

博主习惯于 Intellij IDEA类型的编译器,所以不用自己点击保存,eclipse需要自己点击保存,真麻烦…. 所以,提醒各位小伙伴,每次修改了文件,记得 save 保存一下。

问题①:关于生成的bin文件问题。

①、有些小伙伴生成的bin文件可能如下([b]提示不需要boot文件):[/b]

如果你的编译结果是以下的结果,那么您的烧录方式就不需要 烧录 boot.bin文件啦。



那么对应的文件烧录地址如下格式:

烧录文件烧录地址
blank.bin0x3fe000
esp_init_data_default.bin0x3fc000
eagle.flash.bin0x00000
eagle.irom0text.bin0x40000



②、有些小伙伴生成的bin文件可能如下图([b]提示已经生成在upgrade文件夹生成):[/b]



那么对应的文件烧录地址如下格式:

烧录文件烧录地址
blank.bin0x3fe000
esp_init_data_default.bin0x3fc000
boot.bin0x00000
user1.4096.new.6.bin0x10000


等到下载完成就可以点击按下亮灯啦。

后记:所有自己编译出来的工程,都是有四个文件要烧录的,其中2个是必须烧录的(防止初始化失败),这2个文件分别是 esp_init_data_default.bin blank.bin,烧录地址根据您的8266型号区别,我们最平常用的是安信可8266-12系列的,这个是32Mbit,也就是4M flash ,所以他们的地址分别是 0x3FC000 和 0x3FE000 , 最后2个的烧录文件地址看编译之后结果而决定!也即是不一定是0x10000,有可能是0x2000 , 这个根据SDK的版本有关系。所以大家还是留心点!



源码下载:https://github.com/xuhongv/StudyInEsp8266
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  物联网 博客 8266 wi-fi