ESP8266 NodeMcu机智云SOC方案开发经验分享
实现的功能:LED_1和LED_2可以同时用APP和KEY1和KEY2按键(短按)控制适合入门级萌新,大佬请略过,谢谢!功能:LED_1和LED_2可以同时用APP和KEY1和KEY2按键(短按)控制
一、硬件电路及开发环境的搭建
1.硬件电路
首先是从某宝购买WIFI模块ESP8266 NodeMcu,我买的下图这款,4M内存不可接天线,应该是13.5元包邮。现在一直在用,感觉还比较稳定,那种可接天线内存小的还没用过不知咋样。其他的元器件,有两个LED,两个微动开关,面包板,杜邦线若干,5v直流电源。
https://img-blog.csdn.net/2018100721314161?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
有个情况要说明下,这种WIFI模块有两种,一种正常工作时右上角蓝色LED不闪,只有通电时闪一下;另一种是正常工作和通电时都会闪。我买了两块,刚好碰到这两种情况,开始以为是坏的,哈哈。
(1)电路图
https://img-blog.csdn.net/20181007213124683?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
(2)电路实物图
https://img-blog.csdn.net/20181007213416442?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
2.开发环境的搭建
如果是Windows 64位操作系统,可以下载下面这个集成开发环境
链接:https://pan.baidu.com/s/1CdruAWopdVWMEzxKOEJ4uA 提取码:12ct
如果不是的话,可以在百度“乐鑫集成开发环境”,应该很容易找到。
下载好后压解到一个你喜欢的地方,我习惯压解在D盘,压解好后就下图这样。桌面也会出现AiThinker_IDE和ConfigTool两个快捷图标。
https://img-blog.csdn.net/20181007214249794?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
打开这个压解好的AiThinkerIDE_V0.5文件夹,蓝框里面EXE文件对应桌面上的两个图标
https://img-blog.csdn.net/20181007214319726?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
打开蓝框里ConfigTool.exe,下图1,2路径对应上图红框中的内容。如果电脑已经装过eclipse,可以选择安装好的eclipse 的路径。然后点击注册3,再点击保存4,窗口会自动退出。开发环境就配置好了。
https://img-blog.csdn.net/20181007214425767?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
可以点击蓝框里的AiThinker_IDE.exe或者点击桌面的快捷方式图标就可进入开发环境。
https://img-blog.csdn.net/20181007214451258?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
二、机智云开发者中心
接下来是机智云开发者中心上的操作。注册账号应该是基本操作,就不费时间写了。主要讲数据点和自动生成的程序和下载测试APP。进入开发者中心
[*]创建产品
https://img-blog.csdn.net/20181007214503644?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
[*]产品分类:自定,影响不大;
产品名称:自定,影响不大;
技术方案:Wi-Fi/移动网络方案;
通讯方式:Wi-Fi
数据传输方式:定长
https://img-blog.csdn.net/20181007214515437?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
3.产品创建好后
https://img-blog.csdn.net/20181007214530522?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
4.打开创建好的产品
https://img-blog.csdn.net/20181007214545385?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
5.点击显示完整秘钥,输入登入密码Product Secret就会完整显示,将黑色隐藏的Product Key和显示的Product Secret复制到一个记事本中,以后有用。
6.点击左侧数据点,创建数据点。我创建好的数据点如下
https://img-blog.csdn.net/20181007214626510?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
下面两个数据点不用创建,我之前打算用DHT11温湿度传感器来获取temperature温度和humidity湿度,可能是模块坏了,一直读不到值,所以这里就不做介绍了。
我这里使用了两个可写布尔值的数据点,LED_1和LED_2,用于控制LED的开关。(有条件的可以买继电器,通过控制继电器来控制家里的220v电灯或者插座的开关。废话一句,哈哈)。
Tips:标识名可以自定,但是最好让人比较容易看懂,创建好后点应用。
7.点左侧MCU开发,选择右侧SOC方案
粘贴上复制在记事本中的Product Secret ,点击生产代码包,生成好后,点击下载
https://img-blog.csdn.net/20181007214708318?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
8.下载测试APP,点击顶部下载中心
https://img-blog.csdn.net/20181007214834164?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
进入下载中心后,点击左侧“机智云Wi-Fi/移动通信产品调试APP”
https://img-blog.csdn.net/20181007214844885?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
可选择扫码下载,安装在手机上,以备后用。
https://img-blog.csdn.net/20181007214906424?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
三、修改自动生成的代码、编译并烧录
1.修改代码
将上面第7步下载好的压缩包压解到桌面(位置自定,根据个人习惯),打开开发环境软件,也就是这个
https://img-blog.csdn.net/20181007215013239?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
打开后是这样
https://img-blog.csdn.net/201810072150247?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
然后是导入压解好的代码包
点击左上角File,然后是import
https://img-blog.csdn.net/20181007215053141?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
点击C/C++,然后点击Existing Code as Makefile Project
https://img-blog.csdn.net/20181007215107987?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
数字1处选择代码压解到的位置,数字2处选择第3个
https://img-blog.csdn.net/20181007215131411?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
导入好后,展开文件夹,并双击打开左侧红框内的文件,按照右侧红框内容修改。
大概第22行:改BOOT?=new、改APP?=1、如果只有两个数据点改SPI_SIZE_MAP?=2。
https://img-blog.csdn.net/20181007215216639?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
如下图展开文件夹,要修改的就是下面红框中的5个文件
https://img-blog.csdn.net/20181007215418667?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
首先打开gizwits_product.h,定义一个矩阵extern bool STA;用于存储数据点LED_1和LED_2的状态。
https://img-blog.csdn.net/20181007215433778?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
然后打开gizwits_product.c,初始化定义的矩阵bool STA={0};
https://img-blog.csdn.net/20181007215447750?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
找到 int8_t ICACHE_FLASH_ATTR gizwitsEventProcess(eventInfo_t *info, uint8_t *data, uint32_t len) 大概在47行,黑框中的为机智云上定义的数据点名称,红光中的为添加的内容。
https://img-blog.csdn.net/20181007215502673?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
Tips:这个板子和我们常见的板子(51、STM32)不一样,它的IO口置1时,实际输出低电平。
我们的LED是用的共阳机接法,详见电路图。
然后是扫描数据点LED_1和LED_2的状态,并上报,添加红框中的两条代码
#define USER_TIME_MS 100
#define LED_TIMEOUT (100/USER_TIME_MS)定义100ms
https://img-blog.csdn.net/20181007215608549?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
这两条添加到user_main.c里面,避免编译的时候出现错误
https://img-blog.csdn.net/20181007215627752?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
另外改gizwits_protocol.c 中的
#define USER_TIME_MS 100 可以降低控制延时
https://img-blog.csdn.net/20181007215652504?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
找到gizwits_protocol.c 中的void ICACHE_FLASH_ATTR userHandle(void),这个上报程序
添加以下代码
GPIO_OUTPUT_SET(GPIO_ID_PIN(4),!STA);
GPIO_OUTPUT_SET(GPIO_ID_PIN(5),!STA);
static uint8_t ledtime=0; //每100ms上报一次数据点状态
ledtime++;
if(LED_TIMEOUT<ledtime)
{
ledtime=0;
currentDataPoint.valueLED_1=STA;
currentDataPoint.valueLED_2=STA;
}
[*]1
https://img-blog.csdn.net/20181007215713938?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
找到下面的void ICACHE_FLASH_ATTR userInit(void),这个是数据点初始化
修改如下
currentDataPoint.valueLED_1 = 0;
currentDataPoint.valueLED_2 = 0;
https://img-blog.csdn.net/20181007215738329?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
然后是改user_main.c文件,找到大概第55行
按如下修改
#define GPIO_KEY_NUM 2 // 定义总按键数
#define KEY_0_IO_MUX PERIPHS_IO_MUX_GPIO0_U //
#define KEY_0_IO_NUM 0
#define KEY_0_IO_FUNC FUNC_GPIO0
#define KEY_1_IO_MUX PERIPHS_IO_MUX_GPIO2_U
#define KEY_1_IO_NUM 2
#define KEY_1_IO_FUNC FUNC_GPIO2
https://img-blog.csdn.net/20181007215757301?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
接下来改KEY1也就是GPIO0对应的开关
LOCAL void ICACHE_FLASH_ATTR key1ShortPress(void) //KEY1短按
{
if(STA=!STA) //取反,判断开关是否按下
GIZWITS_LOG("#### GPIO0 short press ,LED_1 ON\n");//日志elseGIZWITS_LOG("#### GPIO0 short press ,LED_1 OFF\n");//日志
[*]1
[*]2
[*]3
[*]4
[*]5
}
/**
[*]Key1 key presses a long press
[*]@param none
[*]@return none
*/
LOCAL void ICACHE_FLASH_ATTR key1LongPress(void) //KEY1长按
{
GIZWITS_LOG("#### GPIO0 long press, SOFTAP ON\n");//日志
gizwitsSetMode(WIFI_SOFTAP_MODE); //设置为局域网模式
https://img-blog.csdn.net/20181007215822691?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
接下来改KEY2也就是GPIO2对应的开关
LOCAL void ICACHE_FLASH_ATTR key2ShortPress(void)//KEY2短按
{
if(STA=!STA) //取反,判断开关是否按下
GIZWITS_LOG("#### GPIO2 short press, LED_2 ON \n");//日志
elseGIZWITS_LOG("#### GPIO2 short press, LED_2 OFF \n");//日志
[*]1
[*]2
[*]3
}
/**
[*]Key2 button long press
[*]@param none
[*]@return none
*/
LOCAL void ICACHE_FLASH_ATTR key2LongPress(void) //KEY2长按
{
GIZWITS_LOG("#### GPIO2 long press, AIRLINK ON\n");//日志
gizwitsSetMode(WIFI_AIRLINK_MODE);//设置为联网模式
}
}
https://img-blog.csdn.net/20181007215849532?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
端口初始化
LOCAL void ICACHE_FLASH_ATTR keyInit(void)
{
singleKey = keyInitOne(KEY_0_IO_NUM, KEY_0_IO_MUX, KEY_0_IO_FUNC,
key1LongPress, key1ShortPress);
singleKey = keyInitOne(KEY_1_IO_NUM, KEY_1_IO_MUX, KEY_1_IO_FUNC,
key2LongPress, key2ShortPress);
keys.singleKey = singleKey;
keyParaInit(&keys);
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO4_U,FUNC_GPIO4);//配置LED_1管脚为输出
GPIO_DIS_OUTPUT(GPIO_ID_PIN(4));
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO5_U,FUNC_GPIO5);//配置LED_2管脚为输出
GPIO_DIS_OUTPUT(GPIO_ID_PIN(5));
GPIO_OUTPUT_SET(GPIO_ID_PIN(4), 0);//输出高电平
GPIO_OUTPUT_SET(GPIO_ID_PIN(5), 0);//输出高电平
}
https://img-blog.csdn.net/20181007215942205?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
所有的代码都修改好了,开始编译,右击项目名,点击Build Project
https://img-blog.csdn.net/20181007220028485?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
编译成功
https://img-blog.csdn.net/20181007220041853?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
烧录,烧录工具可以下载我这个
链接:https://pan.baidu.com/s/1_Bhds-uE9GreQpfVwJ2m7g
提取码:e0kr
https://img-blog.csdn.net/20181007220053317?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
下载好后,打开ESPFlashDownloadTool_v3.6.4.exe这个程序,点击第一个
https://img-blog.csdn.net/20181007220113937?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
选择编译好的文件,路径、COM仅供参考,根据实际情况设置。下面的设置如下图
C:\Users\Administrator\Desktop\SoC_ESP8266_32M_source\bin\boot_v1.6.bin
0x00000
C:\Users\Administrator\Desktop\SoC_ESP8266_32M_source\bin\upgrade\user1.4096.new.4.bin
0x01000
C:\Users\Administrator\Desktop\SoC_ESP8266_32M_source\bin\esp_init_data_default.bin
0x3fc000
C:\Users\Administrator\Desktop\SoC_ESP8266_32M_source\bin\blank.bin
0x3fe000
https://img-blog.csdn.net/20181007220205672?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
终于弄完了软硬件,终于到看成果的时候了,是不是很激动。
还有一步没完成,配网。
首先,你的手机要连上你家里的WIFI。
打开下载的机智云手机APP,点击跳过,不用登入
https://img-blog.csdn.net/20181007220347922?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
点击右上角的+号,点击一键配置
https://img-blog.csdn.net/20181007220404624?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
填入你家里WIFI账号和密码
https://img-blog.csdn.net/20181007220420954?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
选择乐鑫,点击确定
https://img-blog.csdn.net/20181007220432159?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
长安KEY2键,3S以上松开,点击手机上的“我已完成上述操作”
https://img-blog.csdn.net/2018100722045458?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
配网成功
https://img-blog.csdn.net/20181007221638807?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
https://img-blog.csdn.net/20181007221719407?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM1MzE2NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
LED_1和LED_2可以同时用APP和KEY1和KEY2按键(短按)控制了。
祝君成功!!!
That’sall,thanks for your reading.
写得比较琐粹,大佬请略过。。。
未完待续。。。
楼主啊,请问有木有源码分享:),拜谢:victory:
我这边看不了你的图 楼主的图片刷不出来 如果用arduino ide可以连接机智云吗 图片刷不出来 灬灬 发表于 2018-12-18 17:38
如果用arduino ide可以连接机智云吗
可以的 li603672183 发表于 2022-6-20 13:40
图片刷不出来
那到机智云社区 看哈https://club.gizwits.com/forum.php
页:
[1]