




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
蘑菇云 ESP8266开发课堂 提高篇创建自己的超强AT固件使用串口AT命令实现继电器开关效果:AT+RELAY=1AT+ RELAY =0AT+ RELAY?1, /查询指令2, void ICACHE_FLASH_ATTR at_QueryRelay(uint8_t id) 3, uint8_t state = 0x1 & GPIO_INPUT_GET(RELAY_PIN);4, if(state) 5, at_response(ON);6, else 7, at_response(OFF);8, 9, /AT固件的惯例是,输出OK或ERROR字符串结尾,方便外接MCU判断指令边界。10, at_response_ok();11, 12,13, /Setup指令,参数pPara为类似于 =param ,14, void ICACHE_FLASH_ATTR at_setupRelay(uint8_t id, char *pPara) 15, /+pPara 略过第一个“=”字符16, if(atoi(+pPara) 17, /如果参数不为0,控制输出高电平,否则输出低电平。18, gpio_output_set(RELAY_BIT, 0, RELAY_BIT, 0);19, else 20, gpio_output_set(0, RELAY_BIT, RELAY_BIT, 0);21, 22, at_response_ok();23, 24,25, /射频参数初始化,请留空26, void user_rf_pre_init(void)27,28, /指令定义区,必须定义为全局变量或static变量。29, at_funcationType at_custom_cmd = 30, +RELAY, 5, NULL, at_QueryRelay, at_setupRelay, NULL,31, ;32,33, void user_init(void) 34, at_init();35, at_port_print(rnreadyrn);36, /注册自定义指令37, at_cmd_array_regist(&at_custom_cmd0, sizeof(at_custom_cmd)/sizeof(at_custom_cmd0);38, /GPIO控制口功能定义。39, PIN_FUNC_SELECT(RELAY_IO_NAME, RELAY_GPIO_FUNC);使用串口AT命令实现三色灯控制打开文档中,pwm章节代码:#include #include /切记务必包含 at_custom.h#include #include void ICACHE_FLASH_ATTR color_change(uint32 duty, uint8 channel)/如果Value=0,调整最低为1if(!duty) duty = 1;pwm_set_duty(duty, channel);pwm_start();/按惯例,AT指令输出 OKat_response_ok();void ICACHE_FLASH_ATTR at_setupGreen(uint8_t id, char *pPara)color_change(atoi(+pPara), 0); / 绿灯在channel 2void ICACHE_FLASH_ATTR at_setupBlue(uint8_t id, char *pPara)color_change(atoi(+pPara), 2); / 绿灯在channel 2void ICACHE_FLASH_ATTR at_setupRed(uint8_t id, char *pPara)color_change(atoi(+pPara), 1); / 绿灯在channel 2/射频参数初始化,请留空void user_rf_pre_init(void)void user_init(void) at_init(); at_port_print(rnreadyrn); /指令定义区,必须定义为全局变量或static变量。 static at_funcationType at_custom_cmd = +RED, 4, NULL, NULL, at_setupRed, NULL, +BLUE, 5, NULL, NULL, at_setupBlue, NULL, +GREEN, 6, NULL, NULL, at_setupGreen, NULL, ; /注册自定义指令 at_cmd_array_regist(&at_custom_cmd0, sizeof(at_custom_cmd)/sizeof(at_custom_cmd0); /初始化彩灯控制,第一路为 绿色,GPIO12,第二路为红色14,第三路为蓝色13uint32 io_info3 = PERIPHS_IO_MUX_MTDI_U,FUNC_GPIO12,12,PERIPHS_IO_MUX_MTMS_U,FUNC_GPIO14,14,PERIPHS_IO_MUX_MTCK_U,FUNC_GPIO13,13,;/初始化 彩灯亮度 为1,最低亮度u32 duty3 = 1, 1, 1;/设置彩灯pwm周期为1000pwm_init(1000, duty, 3, io_info);pwm_start();编译:1, 老规矩,AT 固件需要增加编译参数2, 此处使用了pwm库函数,需要在appmakefile文件 LINKFLAGS_eagle.app.v6 处新增 -lpwm,修改完后如下所示:使用串口AT命令实现温湿度传感器的读取蘑菇云专属开发板中的温湿度传感器使用了dht11,所以需要包含dht11的驱动文件,这里我们新增一个源文件处理这种情况。将dht.c与dht.h,分别置于user目录与include目录即告完成。完成后如下图所示:代码释义:#include #include #include dht.h/务必包含此头文件#define AT_DBG(fmt, .) do static char _debug_str_128 = 0 ; os_sprintf(_debug_str_, fmt, #_VA_ARGS_);at_response(_debug_str_); while(0)void ICACHE_FLASH_ATTR at_queryDHT(uint8_t id) struct sensor_reading *dhtValue = readDHT(0);if(!dhtValue-success) at_response_error(); else AT_DBG(TEMPERATURE: %d, HUMIDITY: %drn, dhtValue-temperature, dhtValue-humidity);at_response_ok();/代码入口区void user_rf_pre_init(void)void user_init(void) static at_funcationType at_custom_cmd = +RELAY, 6, NULL, at_queryDHT, NULL, NULL, ; at_init(); at_port_print(rnreadyrn); /注册自定义指令 at_cmd_array_regist(&at_custom_cmd0, sizeof(at_custom_cmd)/sizeof(at_funcationType); /初始化DHT11 传感器, 每5秒重新读取一次温湿度数据。 DHTInit(SENSOR_DHT11, 5000);编译:老规矩,AT固件要配置编译参数。测试:第一次还没到5秒时,error,第二次遂正常。使用红外传感器感应人体活动,控制指示灯开关#include /必须包含此头文件。#include #include #include /GPIO管脚定义头文件#include /GPIO操作,包含此头文件/以下中断处理函数不得加宏前缀 ICACHE_FLASH_ATTRstatic void key_intr_handler(void* intrarg) /GPIO 中断处理函数,参考 文档 GPIO中断处理函数 这一章节uint32 gpio_status;gpio_status = GPIO_REG_READ(GPIO_STATUS_ADDRESS);/clear interrupt statusGPIO_REG_WRITE(GPIO_STATUS_W1TC_ADDRESS, gpio_status);/开灯, 0.05秒,即50毫秒,然后灭gpio_output_set(BIT12 | BIT13 | BIT14, 0, BIT12 | BIT13 | BIT14, 0);os_delay_us(1000 * 50);gpio_output_set(0, BIT12 | BIT13 | BIT14, BIT12 | BIT13 | BIT14, 0);void ICACHE_FLASH_ATTR ir_init() /配置中断处理函数ETS_GPIO_INTR_ATTACH(key_intr_handler, NULL);/临时关闭中断,相当于进入临界区ETS_GPIO_INTR_DISABLE();/配置IO0为GPIO使用PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U, FUNC_GPIO0);/配置IO0为输入模式gpio_output_set(0, 0, 0, BIT0); /enable interrupt,参考文档 gpio_pin_intr_state_set gpio_pin_intr_state_set(GPIO_ID_PIN(0), GPIO_PIN_INTR_NEGEDGE); /再次打开中断,相当于退出临界区 ETS_GPIO_INTR_ENABLE();void ICACHE_FLASH_ATTR user_rf_pre_init(void)void ICACHE_FLASH_ATTR user_init(void) at_init(); at_port_print(rnreadyrn); ir_init(); /灭灯 /管脚功能选择, 此处使用对应的GPIO口 PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U, FUNC_GPIO12); PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTCK_U, FUNC_GPIO13); PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTMS_U, FUNC_GPIO14); /向对应IO口输出 低电平,关闭3陆彩灯 gpio_output_set(0, BIT12 | BIT13 | BIT14, BIT12 | BIT13 | BIT14, 0);使用定时器实现指示灯闪烁#include /定时器变量在此头文件中#include #include #include #include /LED操作GPIO/状态机,控制LED亮与灭static uint8_t led_state;void ICACHE_FLASH_ATTR color_flasher(void* timerarg)if(led_state) /控制3路输出高电平gpio_output_set(BIT12 | BIT13 | BIT14, 0, BIT12 | BIT13 | BIT14, 0);led_state = 0; else /控制3路GPIO输出低电平。gpio_output_set(0, BIT12 | BIT13 | BIT14, BIT12 | BIT13 | BIT14, 0);led_state = 1;void ICACHE_FLASH_ATTR user_rf_pre_init(void)void ICACHE_FLASH_ATTR user_init(void) /指令定义区,必须定义为全局变量或static变量。 at_init(); at_port_print(rnreadyrn); /管脚功能选择, 此处使用对应的GPIO口 PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U, FUNC_GPIO12); PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTCK_U, FUNC_GPIO13); PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTMS_U, FUNC_GPIO14); /向对应IO口输出 低电平,关闭3陆彩灯 gpio_output_set(0, BIT12 | BIT13 | BIT14, BIT12 | BIT13 | BIT14, 0); /首先定义定时器变量,此处定义为static方便一些 static os_timer_t timer; /首先初始化timer变量 os_timer_disarm(&timer); /配置timer回调函数与参数 os_timer_setfn(&timer, color_flasher, &timer); /设置每秒调用一次,且重复,即循环 os_timer_arm(&timer, 1000, 1); /初始化LED灭 led_state = 0;使用AT固件,连接云平台1, 下载SDK,地址 /webv2/down_roms/espush_sdk/ 2, 创建新的AT工程,命名为espush_at_013, 将下载的sdk解压,libespush.a 放到lib目录,espush.h放到appinclude目录4, user_main.c第一行加入 #include espush.h,代码中使用espush_register,即可连入云平台。5, 修改app/Makefile文件 段,加入 -lespush,如pwm章节。6, 编译烧录即可,注意老规矩,AT固件的编译参数配置。7, 烧录完成后连入串口,使用AT+CWJAP等指令配置网络。8, 完成后下载 App /webv2/down_apk/ 进行远程 GPIO 控制,先试试GPIO5(继电器)?使用串口AT指令接受按键输入按键需要响应GPIO事件,官方的driver_lib目录下提供了key.c文件以驱动一般的按钮。1, 在app下新建driver目录,并将key.c与key.h分别置于app下的driver与includedriver目录。2, key.h有编译时的依赖bug,在key.h头部增加一行 #include 3, 拷贝driver_libdriver的Makefile到appdriver目录。4, 并同时修改AppMakefile文件:Line 51处,COMPONENTS_eagle.app.v6 段,新增 driver/libdriver.a,完成后如下:Line 24处,SUBDIRS段新增 driver,完成后如下:主文件代码如下:#include #include #include #include #include driver/key.hstatic uint8_t led_state;static void ICACHE_FLASH_ATTR btn_pressed(void) if(led_state) gpio_output_set(BIT12 | BIT13 | BIT14, 0, BIT12 | BIT13 | BIT14, 0);led_state = 0; else gpio_output_set(0, BIT12 | BIT13 | BIT14, BIT12 | BIT13 | BIT14, 0);led_state = 1;at_response_ok();void ICACHE_FLASH_ATTR user_rf_pre_init(void)void ICACHE_FLASH_ATTR user_init(void) at_init(); at_port_print(rnreadyrn);static struct keys_param keys;/1 代表1个按钮,可同时驱动多个,只需定义多个数组元素即可。static struct single_key_param *keys_param1;/定义IO2为按钮,并定义按钮 短按与长按的回调函数keys_param0 = key_init_single(2, PERIPHS_IO_MUX_GPIO2_U, FUNC_GPIO2, NULL, btn_pressed);/按钮数量1 keys.key_num = 1; /按钮参数 keys.single_key = keys_param; /初始化按钮 key_init(&keys); /灭灯 /管脚功能选择, 此处使用对应的GPIO口 PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U, FUNC_GPIO12); PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTCK_U, FUNC_GPIO13); PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTMS_U, FUNC_GPIO14); /向对应IO口输出 低电平,关闭3陆彩灯 gpio_output_set(0, BIT12 | BIT13 | BIT14, BIT12 | BIT13 | BIT14, 0); /初始化LED状态机为 熄灭状态 led_state = 0;使用串口AT指令控制GPIO16口的板载LEDESP8266的GPIO16与其他IO口不同,需要区别对待。同样,官方的driver_lib目录下提供了gpio16.c文件以驱动GPIO16。以下步骤与上节课 按钮 驱动完全类同,照搬即可。5, 在app下新建driver目录,并将gpio16.c与gpio16.h分别置于app下的driver与includedriver目录。6, key.h有编译时的依赖bug,在key.h头部增加一行 #include 7, 拷贝driver_lib的Makefile到appdriver目录。8, 并同时修改AppMakefile文件:Line 51处,COMPON
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年国网湖北省电力有限公司高校毕业生招聘(第二批)笔试参考题库附带答案详解
- 2025年中国东航股份空保管理部校园招聘笔试参考题库附带答案详解
- 2025山西忻州汇丰长城文化园区发展有限公司招聘合同制讲解员10人笔试参考题库附带答案详解
- 2025国家中核北方核燃料元件有限公司招聘笔试参考题库附带答案详解
- 2025四川九洲电器股份有限公司招聘证券事务岗等岗位6人笔试参考题库附带答案详解
- 2025“才聚齐鲁成就未来”山东省环境保护科学研究设计院有限公司及权属企业校园招聘19人笔试参考题库附带答案详解
- 地铁员工安全培训体会课件
- 危险作业安全防护培训课件
- 危险作业安全培训课程课件
- 固化剂安全培训课件
- 高考英语688高频词汇excel版
- 圆度、圆柱度测量仪校准规范
- 第五章牛顿运动定律之板块模型问题专题课件高一上学期物理
- 表面活性剂的基本作用
- 员工网络安全责任书
- 工程建设项目审批流程图(政府投资工程建设项目(市政类线性项目))
- 士林变频器说明书SL
- 博雅汉语准中级加速篇1
- 第二章第一节 遗传论与环境论心理学课件
- 九年级物理上册《第十三章 内能与热机》单元检测卷及答案(沪科版)
- GB/T 16866-2006铜及铜合金无缝管材外形尺寸及允许偏差
评论
0/150
提交评论