NodeMCU连接天猫精灵第二集——开发环境、运行条件、工作代码(基于Blinker点灯科技)

Nora ·
更新时间:2024-11-14
· 531 次阅读

NodeMCU连接天猫精灵第一集——硬件构架(基于Blinker点灯科技)
根据上面说的硬件部分已经搭建完成了,所以现在说一下软件开发,首先要有一个共识,NodeMCU是可以用Arduino IDE开发的,只需要安装完成Arduino IDE之后进行几个步骤就OK了

1.开发环境 A.Arduino IDE

官方安装地址:Arduino
直接下载即可,如果嫌弃官网速度慢的可以自己找资源下载,找不到的就基本告别搞开发了
安装好Arduino IDE之后,打开软件,找到菜单栏>文件>首选项,添加以下网址到 附加开发板管理器网址
http://arduino.esp8266.com/stable/package_esp8266com_index.json
操作如图所示:
在这里插入图片描述
在这里插入图片描述

B.ESP8266模组

之后找到 菜单栏>工具>开发板>开发板管理器,搜索“esp8266”,并选择最新版本安装
在这里插入图片描述
在这里插入图片描述
等待安装完成之后就可以在 菜单栏>工具>开发板>开发板管理器找到Generic ESP8266 Module选中Generic ESP8266 Module就可以开始开发了。

C.点灯科技的Arduino库

下载并安装点灯科技的Arduino库:点击下载

Windows:将下载好的blinker库解压到 我的电脑>文档>Arduino>libraries 文件夹中
Mac OS:将下载好的blinker库解压到 文稿>Arduino>libraries 文件夹中

今后用到的库文件都是放在上述目录下。

2.运行条件

该设备要使用天猫精灵控制就必须联网控制,接下来就是几个必要条件:

有WiFi可以用 一台不算太过老旧的智能手机 手机安装点灯科技(blinker)图标是一个蓝色发光二极管 手机安装天猫精灵APP

首先要在点灯科技APP内创建设备并获取设备的专用密钥,操作过程如图所示APP操作过程
得到设备密钥后先记下来,一会儿有用

然后就是测试一下自己的天猫精灵有没有联网了,确定连上网络之后,就开始敲代码

3.工作代码

由于暂时在实验阶段,工作代码就用来点亮NodeMCU上的LED为目的;对于Arduino的基本操作和NodeMCU的GPIO和AD转换我在之前的文章讲过,下面附上链接
NodeMCU的基础控制(GPIO)
NodeMCU的AD转换
我就直接放代码了:

#define BLINKER_PRINT Serial #define BLINKER_WIFI #define BLINKER_ALIGENIE_OUTLET #include char auth[] = "***********"; //填上刚刚记下来的密钥 char ssid[] = "***********"; //填上你家WiFi名字 char pswd[] = "***********"; //填上你家WiFi密码 bool oState = false; //记录状态量 void aligeniePowerState(const String & state) //天猫精灵电源状态函数 { BLINKER_LOG("need set power state: ", state); //获取电源状态 if (state == BLINKER_CMD_ON) //状态为开 { digitalWrite(LED_BUILTIN, HIGH); //状态为开的对应动作 BlinkerAliGenie.powerState("on"); //返回开状态 BlinkerAliGenie.print(); oState = true; } else if (state == BLINKER_CMD_OFF) //状态为关 { digitalWrite(LED_BUILTIN, LOW); //状态为关的对应动作 BlinkerAliGenie.powerState("off"); //返回关状态 BlinkerAliGenie.print(); oState = false; } } void aligenieQuery(int32_t queryCode) //天猫精灵查询函数 { BLINKER_LOG("AliGenie Query codes: ", queryCode); //天猫精灵状态查询 switch (queryCode) { case BLINKER_CMD_QUERY_ALL_NUMBER : BLINKER_LOG("AliGenie Query All"); BlinkerAliGenie.powerState(oState ? "on" : "off"); BlinkerAliGenie.print(); break; case BLINKER_CMD_QUERY_POWERSTATE_NUMBER : BLINKER_LOG("AliGenie Query Power State"); BlinkerAliGenie.powerState(oState ? "on" : "off"); BlinkerAliGenie.print(); break; default : BlinkerAliGenie.powerState(oState ? "on" : "off"); BlinkerAliGenie.print(); break; } } void dataRead(const String & data) //点灯科技的数据读取 { BLINKER_LOG("Blinker readString: ", data); Blinker.vibrate(); uint32_t BlinkerTime = millis(); Blinker.print(BlinkerTime); Blinker.print("millis", BlinkerTime); } void setup() //初始化设备 { Serial.begin(115200); //初始化串口 #if defined(BLINKER_PRINT) BLINKER_DEBUG.stream(BLINKER_PRINT); #endif pinMode(LED_BUILTIN, OUTPUT); //LED设定为输出模式 digitalWrite(LED_BUILTIN, LOW); //LED低电平 Blinker.begin(auth, ssid, pswd); //连接网络并接入物联网平台 Blinker.attachData(dataRead); BlinkerAliGenie.attachPowerState(aligeniePowerState); //启动天猫精灵电源状态函数 BlinkerAliGenie.attachQuery(aligenieQuery); //启动天猫精灵查询函数 } void loop() //进入主循环 { Blinker.run(); //Blinker状态运行 }

将上述代码复制到Arduino IDE的编辑界面,并连接好NodeMCU和电脑后点击工具–>串口–>选择NodeMCU对应的串口,点击Arduino IDE的编辑界面左上角的右箭头,直接编译下载程序到NodeMCU上,等待下载完毕。

在这个时候就可以打开天猫精灵APP,在天猫精灵中绑定自己的Blinker账号,刚刚下了点灯科技的肯定一个都有吧,绑定方式是点击天猫精灵app右下角的我家–>添加设备–>搜索栏搜索blinker–>选择中心的插座图标就会跳出你刚刚在blinker创建的设备,点击同步设备即可,流程如下:
天猫精灵操作流程
如果NodeMCU没有上线的话是看不到第五步的内容哦,看不到就要检查网络状态。
之后在天猫精灵APP内修改设备名称就可以叫天猫精灵打开或者关闭设备了,具体操作示例在天猫精灵app里点击需要控制的设备后下方会有相应操作。

搞定上面的问题,如果可以用过天猫精灵把NodeMCU上的灯叫亮之后基本就没有什么问题了,下面我放上我的多个插座的代码,祝大家玩的愉快!!!

#define BLINKER_PRINT Serial #define BLINKER_WIFI #define BLINKER_ALIGENIE_MULTI_OUTLET #include BlinkerButton Button1("btn-lt1"); //设置blinkerapp内数据键名 BlinkerButton Button2("btn-lt2"); //这里只用了其中三个 BlinkerButton Button3("btn-lt3"); BlinkerButton Button4("btn-lt4"); BlinkerText Text1("text_1"); char i; char auth[] = "***********"; //填上刚刚记下来的密钥 char ssid[] = "***********"; //填上你家WiFi名字 char pswd[] = "***********"; //填上你家WiFi密码 bool oState[5] = { false }; void aligeniePowerState(const String & state, uint8_t num) { BLINKER_LOG("need set outlet: ", num, ", power state: ", state); if(num == 1){ i=0; //指定每一路开关对应在开发板上的通道接口 }else if(num == 2){ i=2; }else if(num == 3){ i=4; }else if(num == 4){ i=5; } if (state == BLINKER_CMD_ON) { digitalWrite(i, HIGH); Blinker.delay(200); digitalWrite(i, LOW); BlinkerAliGenie.powerState("on",num); BlinkerAliGenie.print(); oState[num] = true; } else if (state == BLINKER_CMD_OFF) { digitalWrite(i, HIGH); Blinker.delay(200); digitalWrite(i, LOW); BlinkerAliGenie.powerState("off",num); BlinkerAliGenie.print(); oState[num] = false; if (num == 0) { for (uint8_t o_num = 0; o_num < 5; o_num++) { oState[o_num] = false; } } } } void aligenieQuery(int32_t queryCode, uint8_t num) { BLINKER_LOG("AliGenie Query outlet: ", num,", codes: ", queryCode); switch (queryCode) { case BLINKER_CMD_QUERY_ALL_NUMBER : BLINKER_LOG("AliGenie Query All"); BlinkerAliGenie.powerState(oState[num] ? "on" : "off",num); BlinkerAliGenie.print(); break; case BLINKER_CMD_QUERY_POWERSTATE_NUMBER : BLINKER_LOG("AliGenie Query Power State"); BlinkerAliGenie.powerState(oState[num] ? "on" : "off",num); BlinkerAliGenie.print(); break; default : BlinkerAliGenie.powerState(oState[num] ? "on" : "off",num); BlinkerAliGenie.print(); break; } } void dataRead(const String & data) { BLINKER_LOG("Blinker readString: ", data); Blinker.vibrate(); uint32_t BlinkerTime = millis(); Blinker.print(BlinkerTime); Blinker.print("millis", BlinkerTime); } void button1_callback(const String & state) //点灯app内控制按键触发 { BLINKER_LOG("get button state: ", state); digitalWrite(0, HIGH); Blinker.delay(200); digitalWrite(0, LOW); Blinker.print("灯具操作已处理"); Text1.print("shuju"); } void button2_callback(const String & state) //点灯app内控制按键触发 { BLINKER_LOG("get button state: ", state); digitalWrite(2, HIGH); Blinker.delay(400); Blinker.print("灯具操作已处理"); digitalWrite(2, LOW); } void button3_callback(const String & state) //点灯app内控制按键触发 { BLINKER_LOG("get button state: ", state); digitalWrite(4, HIGH); Blinker.delay(300); Blinker.print("灯具操作已处理"); digitalWrite(4, LOW); } void button4_callback(const String & state) //点灯app内控制按键触发 { BLINKER_LOG("get button state: ", state); digitalWrite(5, HIGH); Blinker.delay(300); Blinker.print("灯具操作已处理"); digitalWrite(5, LOW); } void setup() { Serial.begin(115200); #if defined(BLINKER_PRINT) BLINKER_DEBUG.stream(BLINKER_PRINT); #endif pinMode(0, OUTPUT); digitalWrite(0, LOW); pinMode(2, OUTPUT); digitalWrite(2, LOW); pinMode(4, OUTPUT); digitalWrite(4, LOW); pinMode(5, OUTPUT); digitalWrite(5, LOW); pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, LOW); Blinker.begin(auth, ssid, pswd); Blinker.attachData(dataRead); BlinkerAliGenie.attachPowerState(aligeniePowerState); BlinkerAliGenie.attachQuery(aligenieQuery); Button1.attach(button1_callback); Button2.attach(button2_callback); Button3.attach(button3_callback); Button4.attach(button4_callback); } void loop() { Blinker.run(); }

注意填自己的设备信息,不然控不住哦!


作者:ASWaterbenben



天猫精灵 nodemcu 环境 天猫 运行 开发环境 科技

需要 登录 后方可回复, 如果你还没有账号请 注册新账号
相关文章