手上有个小米手机,手机内置了小爱同学APP,早就听说小爱能通过wifi和蓝牙控制一些智能家居,手头正好有esp01s 模块, 这个模块正好板载了一颗led灯,于是我们第一步就是通过小爱同学控制这个灯,blinker的作用 主要是帮我们实现局域网和公网的数据传输桥梁,于是就开始了探索之旅。
详细的环境搭建步骤就不再赘述了,网上教程非常多,也可以参考我的文章:Arduino+esp32+blinker第一课点灯, 如果困难可以加我探讨。
此步骤主要完成:
app安装完成后,增加一个设备
为设备增加一个按钮 方便测试
重要程序
#define BLINKER_WIFI
#define BLINKER_MIOT_LIGHT//支持小爱同学
#define BLINKER_WITHOUT_SSL //非SSL加密通信接入,省堆栈
#include <Blinker.h>
#define LED 2 // 板子上的灯
char auth[] = "fab3464d05**"; // blinker app提供的秘钥
char ssid[] = "xiaomi";// wifi 名字
char pswd[] = "********";// wifi 密码
bool wsState;
uint8_t wsMode = BLINKER_CMD_MIOT_DAY;
// 新建组件对象
BlinkerButton Button1("btn-abc");//注意:要和APP组件’数据键名’一致
// 按下BlinkerAPP按键即会执行该函数
void button1_callback(const String & state) {
BLINKER_LOG("get button state: ", state);
digitalWrite(LED, !digitalRead(GPIO));
Blinker.vibrate();
}
//小爱电源类操作的回调函数:
//当小爱同学向设备发起控制, 设备端需要有对应控制处理函数
void miotPowerState(const String & state)
{
BLINKER_LOG("need set power state: ", state);
if (state == BLINKER_CMD_ON) {
digitalWrite(LED, LOW); //低电平点灯
BlinkerMIOT.powerState("on");
BlinkerMIOT.print();
wsState=true;
}
else if (state == BLINKER_CMD_OFF) {
digitalWrite(LED, HIGH); //高电平开灯
BlinkerMIOT.powerState("off");
BlinkerMIOT.print();
wsState=false;
}
}
//小爱同学 的回调查询函数,照抄即可。主要是查询 当前灯的状态
void miotQuery(int32_t queryCode)
{
BLINKER_LOG("MIOT Query codes: ", queryCode);
switch (queryCode)
{
case BLINKER_CMD_QUERY_ALL_NUMBER :
BLINKER_LOG("MIOT Query All");
BlinkerMIOT.powerState(wsState ? "on" : "off");
BlinkerMIOT.color(0);
BlinkerMIOT.mode(0);
BlinkerMIOT.colorTemp(1000);
BlinkerMIOT.brightness(1);
BlinkerMIOT.print();
break;
case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
BLINKER_LOG("MIOT Query Power State");
BlinkerMIOT.powerState(wsState ? "on" : "off");
BlinkerMIOT.print();
break;
default :
BlinkerMIOT.powerState(wsState ? "on" : "off");
BlinkerMIOT.color(0);
BlinkerMIOT.mode(0);
BlinkerMIOT.colorTemp(1000);
BlinkerMIOT.brightness(1);
BlinkerMIOT.print();
break;
}
}
void setup() {
// 初始化串口,并开启调试信息,调试用可以删除
Serial.begin(115200);
BLINKER_DEBUG.stream(Serial);
// 初始化IO
pinMode(LED, OUTPUT);
digitalWrite(LED, HIGH); // 初始化 led 高电平 ,则灯熄灭状态
// 初始化blinker
Blinker.begin(auth, ssid, pswd);
Button1.attach(button1_callback);
//小爱同学务必在回调函数中反馈该控制状态
BlinkerMIOT.attachPowerState(miotPowerState);//注册回调函数
BlinkerMIOT.attachQuery(miotQuery);
}
我们在改为代码之后就可以往esp8266开发板内烧写程序了
注意
一般所购买的wifi模块,通过数据线就可以连接进行烧写
特殊的我们需要用到usb-ttl 来为其烧写程序
实物图片:
如果嫌麻烦 CH-PD不上拉也可以,直接接高电平。
esp8266-01模块烧录时,需要把gpio0拉低,即接地。烧录完成后拔掉拔掉gpio0的杜邦线。烧录速率选择 115200 bps
Arduino 选择烧录的板子,选择esp8266 选择 led2,其他参数参考下图即可。点击代码上传即可 烧录到 esp01s中。
打开米家APP按照如下图配置:
进入米家APP,点击「我的」—「其他平台设备」,添加点灯科技,进入后,点击同步设备,就会看到在Blinker中创建的设备。
试着对小爱说:“打开灯”、“关闭灯”、“灯的状态”,可能网络不好会有些延迟,不过想要的控制已经实现了,放一下测试时拍的视频,你也可以尝试去控制些别的设备了。
等我们一切完成就绪就可以通过小爱同学来控制我们的设备了,这里只是简单的打开开发板上面的小灯,下一节我们来说用小爱同学控制一台电风扇。
*玩转esp8266 ESP32 喜欢的朋友请加入我微信 ilinker32 24小时在线,有偿技术咨询 *如果我的创作对你有帮助 ,那么你的鼓励将是我创作的最大动力!非常感谢。
文章浏览阅读464次。基于python的StructuredStream开发示例如下:from pyspark.sql import Row, SparkSessionfrom pyspark.sql.functions import explodefrom pyspark.sql.functions import splitfrom pyspark.sql.types import *from pyspar..._python structured streaming提交示例
文章浏览阅读1.3k次。之前讲述的“开-闭”原则是系统设计的主原则,做到这点是一件很不容易的工作。但是也不是高不可攀的,除此原则以外还有其他的一些设计原则为实现或者说尽可能的达到“开-闭”提供有效的手段和工具。如果将“开-闭”原则比喻成一个人在移动这一行为的话,那么一下所讲述的原则就好比是人的脚,交通工具等一样,她们都是附属于“开-闭”原则的。让我们先看看里氏代换原则吧!! 里氏代换原则 Liskov Subs_系统设计原则 原子化 单一化
文章浏览阅读1w次,点赞4次,收藏7次。前言IDE提供了强大的纠错与补全能力,但是对于从开发时的编程语言实时转译,提供开发本地服务器以及自动刷新,到转为生产环境代码的编译,压缩,混淆代码以及打包,还是交给一些第三方工具的吧,对,我说的就是Typescript代替Javascript进行前端开发,第三方工具就说的是神器webpack。在此记录一下,下一次直接复制粘贴 :-p需求开发环境即时编译为js,并自动刷新页面生产环境将es6/e_webpact typescript安装babel-polyfill
文章浏览阅读7.6w次,点赞3.2k次,收藏6.5k次。废话不多说,上干货是兔老大的传统了,收藏就完事了。数据库系统概论四个基本概念数据:数据库中存储的基本对象,描述一个事物的符号记录,数据和其语义不可分开说数据库(DB):是长期储存在计算机内、有组织的、可共享的大量数据的集合。数据库管理系统:一个管理数据的软件主要功能:数据定义功能:(1)提供数据定义语言(DDL):创建表(CREATE),修改表(ALTER),删除表(DROP);(2)定义数据库中的数据对象操纵功能:提供数据操纵语言(DML,即增删改查的操._设计表每个人设计一张表,至少具有四个属性,并列举这个关系当中的所有候选码
文章浏览阅读427次。一、作用Spring为我们解决Hibernate的Session的关闭与开启问题。 Hibernate 允许对关联对象、属性进行延迟加载,但是必须保证延迟加载的操作限于同一个 Hibernate Session 范围之内进行。如果 Service 层返回一个启用了延迟加载功能的领域对象给 Web 层,当 Web 层访问到那些需要延迟加载的数据时,由于加载领域对象的 Hibernate Sess
文章浏览阅读566次。BT1120不仅支持并行传输,也定义了并行传输。详细说明可以看ITU-R BT1120,在这里只做概述和总结。转载于:https://www.cnblogs.com/zhongguo135/p/8405665.html_bt1120传输速率
文章浏览阅读1.1k次。场景:使用普通用户jx,将host1上的myfiles目录同步到host2的myfiles安装:Redhat7.8,服务器端和客户端,都使用yum install rsync即可安装的版本:3.1.2配置—rsync服务端(172.16.0.2)—普通用户jxmkdir /home/jx/rsyncdvi /home/jx/rsyncd/rsyncd.conf# 自定义端口port=88873# 普通用户需要将uid和gid注释掉,否则会报错setgroups failed: Oper_rsyncd能不能用普通用户启动
文章浏览阅读2.2k次。第一种:利用spool。缺点:性能较差利用Oracle中的Spool缓冲池技术可以实现Oracle数据导出到文本文件。1)、在OraclePL/SQL中输入缓冲开始命令,并指定输出的文件名:spoold:output.txt2)、在命令行中随便输入你的SQL查询:selectmobilefromcustomer;selectmobilefromclient;……3)、在命令行中输入..._oracle 使用utl_file导出txt sql
文章浏览阅读319次。完整版请看链接:http://b36d5043.wiz03.com/share/s/2Prl132RpQ3x2XpA4I2oTa2204K0FF0vB4J42tWIEQ04UrAg首先下载flutter SDK; 解压的/Users/app/下下载: Android Studio 并且安转,默认选项,知道安转安装完成,有些需要提供权限。安装https://www.j..._macbook java15 flutter noclass
文章浏览阅读119次。炼数成金数据分析课程---12、统计学常用知识一、总结一句话总结:大纲+实例快速学习法主要讲的是统计学和编程的结合:在代码里面怎么把这些统计学敲出来1、学习统计学一般学习哪两方面的内容?描述统计学假设检验◆描述统计学-集中趋势-离散趋势-偏态◆假设检验-基本原理-基本概率2、统计学可以分为哪两类?..._炼数成金 hmm
文章浏览阅读5.2k次。方案一:let pinf = plus.push.getClientInfo();let cid = pinf && pinf.clientid || ''; //客户端标识有可能取不到clientId,或者为‘undefined’ ‘null' 等字符串由于可能取不到,然后使用方案二,异步获取方案二:plus.push.getClientInfoAsync((info) => { cid = info.clientid; }, err =&g_plus.push.getclientinfo()
文章浏览阅读876次。1.分层的事件队列2.执行事件的队列3.仿真时间的计算4.同一层事件,无先后顺序这个点:觉得Verilog与systemVerilog比较,Verilog比较笼统,systemVerilog则比较细分。在Verilog眼中无论testbench、dut还是assertion都是code。所以先把code吃进来,然后有一个时间轴参数,仅仅处理set t = 0时刻的code...._verilog 事件队列