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.bin | 0x3fe000 |
esp_init_data_default.bin | 0x3fc000 |
eagle.flash.bin | 0x00000 |
eagle.irom0text.bin | 0x40000 |
那么对应的文件烧录地址如下格式:
烧录文件 | 烧录地址 |
---|---|
blank.bin | 0x3fe000 |
esp_init_data_default.bin | 0x3fc000 |
boot.bin | 0x00000 |
user1.4096.new.6.bin | 0x10000 |
等到下载完成就可以点击按下亮灯啦。
后记:所有自己编译出来的工程,都是有四个文件要烧录的,其中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
相关文章推荐
- Esp8266学习之旅③ 利用 " 软件定时器 "或“硬件定时器” 定时0.5秒闪烁点亮一盏LED。(附带demo)
- Esp8266进阶之路14 esp8266的 FreeRtos系统学习的正确姿势,环境配置环境、烧录。(附带demo)
- Esp8266学习之旅④ 了解PWM,更为深入地用PWM控制一盏LED的亮度变化。(附带demo)
- Esp8266学习之旅13 动手做个8266毕设小案例,smartConfig + MQTT协议轻松实现远程控制一盏LED。(附带demo)
- Esp8266学习之旅⑤ 8266原生乐鑫SDK高级使用之封装Post与Get请求云端,拿到“天气预报信息”。(带Demo)
- 开始学习使用Birt
- 开始学习VS2005使用winpcap
- AS3.0基础学习笔记(1):开始第一程序
- 【ExtJs学习系列】开始使用Grid(四)
- 学习YUI.Ext 第四天--开始使用Grid
- 开始学习LUA,在LUA中使用UNICODE字符串
- android学习小结5-各种控件使用方式DEMO
- 利用PlumbBob学习iphone加速度检测器的使用
- 一起学习Silverlight企业应用2:开始使用Silverlight,以及一些基本概念
- APIDemo学习笔记——在XML中使用自定义的View类
- APIDemo学习笔记——Android上几种简单的Animation使用方法(三)——3D Transition
- 从今天开始使用csdn的blog开始记录学习历程
- 学习JAVA-三步半使用开始LOG4J。
- openlayers使用笔记1 从例子开始学习openlayers
- 利用DWR开始在你的Web应用中使用AJAX(转载)