当然也可以直接用开发板搞起,不过我就这么一个,舍不得。 之前一直有人问这体验板和开发板有什么不同,这要我怎么回答。。。长得不同呗,其实这两主要部分就是一个玩意;不过使用开发板上面的模块需要买个降压模块,3.3V的,电路上出来的是5V,不能直接用,如果是体验板就不要了,直接用。如果有的朋友比较浪,直接一个开发板搭上去,我也无话可说了,跟体验板一样,直接使用就好了。 1.2硬件搭建
啥也不说,把灭蚊器拆开看一下;
看一下电路部分吧;
恩,好简单的玩意,就是点个灯转个风扇的事,啥也不说了,直接把电路搭好吧;
可能大家看电路图容易理解一点,好吧,我花几分钟画个简单的原理图;
可以看到,原理其实很简单,就是把电源引出到继电器上面,然后让体验板能够直接控制电源的通断,说的再直白一点,就是给产品引出一个新的开关,只不过这个开关我能使用软件控制而已。
最后来一张做完的图片,里面都看不到了,跟买来的时候一模一样,但是却能让我自由控制了;
这就是基本的硬件结构了,下面介绍软件的处理。
1.3 ESP8266固件编写
首先确定一下我需要什么功能:
1.定时开关设备,健忘症必备,少不了的东西;
2.局域网控制,虽然是在家里,走两步就可以了,但是我比较懒,有时候在床上,懒得动;
3.开关状态反馈,**作之前好歹要知道现在设备是工作还是休息的吧,少不了;
4.微信控制,反正有现成的东西,不要我白不要,搞起;
5.APP控制,我是不太喜欢微信点来点去的,做个APP,果断直接,必须支持广域网,局域网随便了,反正网上那么多UDP/TCP的APP,看心情吧;
6.上位机控制,我的老本行,少不了,局域网和广域网都要做,作为一个程序员,离不开电脑,手机我还没那么依赖; 7.一键配置网络肯定不能少,恩,airkiss和smartconfig少不了;
差不多就这些了,现在可以搞起了。图个快捷简单,直接在开发快源码上做手脚。
1.3.1 IO口的驱动
避免冲突,找个开发板没使用的IO口来搞事情,就GPIO8了,没有为什么。改代码其实蛮简单了,就把一些不要的函数直接干掉,加上自己的就好了;
先做个无关紧要的事情,改下版本号:
#define SOFTWARE_VERSION "小白-电子灭蚊器源码"
第一个函数:本来是获取工作模式的,**作个继电器而已,不需要那么多东西,直接删掉,使用WORK_MODE_RGB模式
user_get_work_mode(et_uint32 *mode)
{
*mode = WORK_MODE_RGB;
return RETURN_OK;
}
第二个函数:user_init_work_mode(et_uint32 mode, et_uchar fac_norm_mode)
虽然原本函数删了再说;
user_init_work_mode(et_uint32 mode, et_uchar fac_norm_mode)
{
PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U,FUNC_GPIO12);
return RETURN_OK;
}
看过我之前的文章的朋友都知道,我习惯一边写代码,一边写文档;所以里面会有一些测试的东西,大家忽略不计,我做了注释;
初始化就这么完了,定义一下对GPIO的操作;
/*开关继电器的操作*/
#define my_gpio GPIO_INPUT_GET(GPIO_ID_PIN(8))
#define MY_ON GPIO_OUTPUT_SET(GPIO_ID_PIN(8), 1)
#define MY_OFF GPIO_OUTPUT_SET(GPIO_ID_PIN(8), 0)
这里我要处理下串口的内容,做个数据透传,不然我数据发没发,发了些啥玩意都不知道,官方源码里面有现成的,不过我用的不是很顺手,改一下,反正我自己写过;
/********************************************
* 函数名:uart0_tx_buffer(uint8 *buf, uint16 len)
* 函数用途:发送数组
* 参数1:buf
* 参数1作用:数组指针
* 参数1:len
* 参数1作用:数组长度
* 修改时间:2017-1-14
* 修改人:小白
********************************************/
void ICACHE_FLASH_ATTR
uart0_tx_buffer(uint8 *buf, uint16 len)
{
uint16 i;
for (i = 0; i < len; i++)
{
uart_tx_one_char(UART0, buf);
}
}
/********************************************
* 函数名:uart0_tx_SendStr(uint8 *buf)
* 函数用途:发送字符串
* 参数:buf
* 参数作用:数组指针
* 修改时间:2017-1-14
* 修改人:小白
********************************************/
void ICACHE_FLASH_ATTR
uart0_tx_SendStr(uint8 *buf)
{
while(*buf!='