16年写过一次《ESP8266ESP-12小黄板调试,接入未来之家》
由于这是个小号,当时有人说有问题也没回答。这几年工作较忙,也没心思玩这个。最近稍微闲点,看到淘宝esp01模块挺便宜,就入手了几套准备玩玩。一套相当于9.8元,运费好像是4元多,买了几套,再加上开发板,大约一套11元。可能有更便宜点的,懒得找了。
未来之家不支持天猫控制,就没继续,随便翻了翻几个帖子,好像贝壳物联简单点,就做这个了。研究了1天机智云,没研究明白暂时搁置了。但机智云刷固件那个绝对是不适合esp01了。
一.硬件基础设置
我的relay模块继电器是这样的,据说有很多版本,我这个不用任何改造。
1.烧录 烧录时,GPIO0 与GND 短接;完成后看接口输出数据时要断开。
2.板子改造,增加按钮控制继电器 板子自带按钮与RSD 连接(感觉没啥用),断开此连接,接入GPIO2 能够实现自带按钮控制继电器
二.Arduino 基本设置
1.搜索Arduino IDE,下载。 我用的是arduino-1.8.9。 2.打开arduino ide 文件->首选项->“附加开发板管理器网址”输入 http://wechat.doit.am/package_esp8266com_index.json 如下 3.打开C:\Users\Administrator\AppData\Local\ 把Arduino15 文件夹复制到此位置。(后边会给百度云链接)
三.Esp01s接入贝壳物联
1.将libraries/aJson文件夹全部复制到Arduino IDE的库文件夹内。(后边会给百度云链接) Windows系统通常位于: C:\Program Files \Arduino\libraries 2.下载百度云链接里的BEIKE2文件夹,程序在这里面。 登陆贝壳物联>>设备列表>>添加管理设备>>按提示操作完成见下图, ID填入ino文件中 String DEVICEID="123"; // 你的设备编号 替换“123” APIKEY 填入ino文件中 String APIKEY = "123"; // 设备密码== 替换“123”
3.将程序上传到esp01s,开发板、各种设置按下图,端口按你实际的
三. 贝壳物联接入天猫精灵
天猫精灵>>我家>>添加设备>>搜索“贝壳”>>选第一个>>登陆贝壳账号>>按提示操作,记不清了。就能天猫精灵语音控制。
相关文件在百度云
链接:https://pan.baidu.com/s/1G75SP1_INM3jGewC2EZ2yQ
提取码:l67e
懒得下载或者就是参考一下的,源码贴这
#include <ESP8266WiFi.h>
#include <aJSON.h>
//============= 此处必须修该============
String DEVICEID="123"; // 你的设备编号 ==
String APIKEY = "123"; // 设备密码==
const char* ssid = "123";//无线名称
const char* password = "123";//无线密码
//=======================================
unsigned long lastCheckInTime = 0; //记录上次报到时间
const unsigned long postingInterval = 40000; // 每隔40秒向服务器报到一次
const char* host = "www.bigiot.net";
const int httpPort = 8181;
int jiange=0;
String zhuangtai;
#define pins 0 //继电器连接在8266的GPIO0上
WiFiClient client;
void setup() {
Serial.begin(115200);
delay(10);
//默认输出关闭电频
pinMode(pins, OUTPUT);
digitalWrite(pins, HIGH);
pinMode(2,OUTPUT);
digitalWrite(2,HIGH);
// We start by connecting to a WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
while (!client.connect(host, httpPort)) {
Serial.println("connection failed");
delay(500);
}
Serial.print("connecting to ");
Serial.println(host);
}
void loop() {
if(digitalRead(2) == 0&&millis()-jiange>5000) //按钮按下 且 间隔超过300ms 执行一次
{
digitalWrite(0,!digitalRead(0));
jiange=millis();
/*if(!digitalRead(0))
{ zhuangtai="led on" ; }
else
{zhuangtai="led off" ;}
zhuangtai = "{\"M\":\"say\",\"ID\":\"D" + DEVICEID + "\",\"C\":\"" +zhuangtai + "\"}\n";
client.print(zhuangtai) ;*/
}
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
// Use WiFiClient class to create TCP connections
if (!client.connected()) {
if (!client.connect(host, httpPort)) {
Serial.println("connection failed");
delay(5000);
return;
}
}
if(millis() - lastCheckInTime > postingInterval || lastCheckInTime==0) {
checkIn();
}
// Read all the lines of the reply from server and print them to Serial
if (client.available()) {
String inputString = client.readStringUntil('\n');
inputString.trim();
Serial.println(inputString);
int len = inputString.length()+1;
if(inputString.startsWith("{") && inputString.endsWith("}")){
char jsonString[len];
inputString.toCharArray(jsonString,len);
aJsonObject *msg = aJson.parse(jsonString);
processMessage(msg);
aJson.deleteItem(msg);
}
}
}
void processMessage(aJsonObject *msg){
aJsonObject* method = aJson.getObjectItem(msg, "M");
aJsonObject* content = aJson.getObjectItem(msg, "C");
aJsonObject* client_id = aJson.getObjectItem(msg, "ID");
if (!method) {
return;
}
String M = method->valuestring;
if(M == "say"){
String C = content->valuestring;
String F_C_ID = client_id->valuestring;
if(C == "play"){
digitalWrite(pins, LOW);
sayToClient(F_C_ID,"LED on!");
}else if(C == "stop"){
digitalWrite(pins, HIGH);
sayToClient(F_C_ID,"LED off!");
}else{
int pin = C.toInt();
/* if(pin > 0 && pin <= arr_len){
pin--;
state[pin] = !state[pin];
digitalWrite(pins[pin], state[pin]);
}*/
sayToClient(F_C_ID,"LED pin:"+pin);
}
}
}
void checkIn() {
String msg = "{\"M\":\"checkin\",\"ID\":\"" + DEVICEID + "\",\"K\":\"" + APIKEY + "\"}\n";
client.print(msg);
lastCheckInTime = millis();
}
void sayToClient(String client_id, String content){
String msg = "{\"M\":\"say\",\"ID\":\"" + client_id + "\",\"C\":\"" + content + "\"}\n";
client.print(msg);
lastCheckInTime = millis();
}
|