TA的每日心情 | 无聊 2021-7-15 17:25 |
---|
签到天数: 21 天 连续签到: 1 天 [LV.4]偶尔看看III
|
前段时间申请了LinkNode R4的试用权,这段时间挺忙,没什么功夫弄,嘿嘿,有点不好意思了,趁着这个中秋玩一玩。
首先,来一个迟到的晒开箱:
好吧,网实在是太卡了,尝试了好几次上传盒的图都失败了,不过看到这个小板的时候,还是有点小失望的,板子只有一个DC插口来进行供电,没有开关,没有复位,我很欣慰的是有电源灯。。。。。,板板的电路很简单,就是一个IO口驱动继电器的典型电路,我就不赘述了,就说一下遇到的坑吧。
原来在项目中用过ESP8266,不过那时候我是刷了NodeMCU固件,使用LUA进行编程,这是第一次使用Arduino的IDE对ESP进行编程(想想还有点小激动。。。),按照官方给的教程:首先打开Arduino IDE,在文件->首选项->附加开发板管理网址处添加:https://arduino.esp8266.com/stable/package_esp8266c... ,添加之后,选择工具->开发板->开发版管理,搜索esp8266,搜到的唯一一条内容后,点击安装,在这里我遇到了第一个坑,控制台报了一个:“下载 https://downloads.arduino.cc/packages/package_index... 时出错”的错误,WTF?怎么搞的,我这是按照教程来的啊没有错误啊,后来我机智的打开了科学上网的利器,进行了一下科学的上网,果然,墙外的空气比较好,不再报错了,开始下载了,我想这下可以安装了呗,可惜,下载卡住了,我一看这个包实在是太大了,下着下着就会自己断掉,所以没办法,百度吧,最后找到一个解决办法:(这是下载好的文件https://pan.baidu.com/s/1sjRFe6h,覆盖掉首选项里边那个配置文件的文件夹即可,比如我的路径是C:\Users\Administrator\AppData\Local\Arduino15\preferences.txt,那需要解压出来覆盖掉C:\Users\Administrator\AppData\Local\Arduino15这个文件夹,覆盖之后可能需要重新设定arduino库的地址,因为preferences.txt里边包含有项目的地址)解决了这个问题之后,就遇到了第二个坑,我发现程序无法下载,找了半天发现是板子上面的短路套位置不对,需要将DI00和GND短接,才是串口下载模式。。。然后下载,成功了,因为板子上面只有四个继电器,这里贴一下控制四个继电器的代码:
#include<ESP8266WiFi.h>#include<ESP8266WebServer.h>#include <WiFiManager.h>#define S1 16#define S2 14#define S3 13#define S4 12void setup() { // put your setup code here, to run once: Serial.begin(115200); pinMode(S1,OUTPUT); pinMode(S2,OUTPUT); pinMode(S3,OUTPUT); pinMode(S4,OUTPUT);}void loop() { // put your main code here, to run repeatedly: digitalWrite(S1,LOW); digitalWrite(S2,LOW); digitalWrite(S3,LOW); digitalWrite(S4,LOW); delay(2000); delay(2000); digitalWrite(S1,HIGH); digitalWrite(S2,HIGH); digitalWrite(S3,HIGH); digitalWrite(S4,HIGH); delay(2000); delay(2000);}代码写好了之后,我想重新下载一次,结果又报错了,报了一个内部flash的错误,后来想到,这个不能自动复位,每次下载都要重新断电一次,要不然下载就会失败,,,,,,
然后就是试验一下,官方的云啦,不过在我看来这些云都没什么区别,无外乎服务器提供一个HTTP接口,客户端构造HTTP协议每次请求,然后轮询,再根据返回参数改变自己的状态。
首先在https://www.linksprite.io/注册一个账户,然后选择Create DIY Device,名字随便起。类型选择02就可以,Group Name看你的分组想法
创建完成可以再下面看到一个台灯的标志,然后就是代码拷贝时间:
#include <dnsserver.h>#include <esp8266webserver.h>#include <wifimanager.h>// replace with your own API key and device ID,String apikey = "1a14f5cd-a4d9-4bdf-bc09-e861b815c042";const char* deviceID = "0200000087";const char* server = "<a href="https://www.linksprite.io" ;"="">www.linksprite.io";</a> WiFiClient client;void setup(){ Serial.begin(115200); pinMode(12, OUTPUT); WiFiManager wifiManager; wifiManager.setAPStaticIPConfig(IPAddress(10,0,1,1), IPAddress(10,0,1,1), IPAddress(255,255,255,0)); wifiManager.autoConnect("LinkNodeAP"); Serial.print("WiFi Connected...\n"); Serial.println("WiFi connected");}void loop(){ if(client.connect(server,80)) { String postStr ="{"; postStr +="\"action\":\"query\","; postStr +="\"apikey\":\""; postStr += apikey; postStr +="\","; postStr +="\"deviceid\":\""; postStr += deviceID; postStr +="\","; postStr += "\"params\":"; postStr += "["; postStr += "\"light\""; postStr +="]"; postStr +="}"; client.print("OST /api/http HTTP/1.1\n"); client.print("Host: "); client.print(server); client.print("\nContent-Type: application/json\n"); client.print("Content-Length: "); client.print(postStr.length()); client.print("\n\n"); client.print(postStr); } delay(1000); Serial.println("Store respons..."); String request = ""; while(client.available()) { char c = client.read(); request +=c; } Serial.println("request:" + request); if(!request.equals("")) { int index1 = request.indexOf(":{"); int index2 = request.indexOf("},"); String param = request.substring(index1, index2 + 1); Serial.print("The param is "); Serial.println(param); if(param.indexOf("off")>0) { digitalWrite(12, HIGH); Serial.println("OFF"); } else if(param.indexOf("on")>0) { digitalWrite(12, LOW); Serial.println("ON"); } client.stop(); Serial.println("Waiting..."); delay(2000); }}</wifimanager.h></esp8266webserver.h></dnsserver.h>这里需要注意的是:
String apikey = "1a14f5cd-a4d9-4bdf-bc09-e861b815c042";
const char* deviceID = "0200000087";
第一个是你的APIkey,用来标示你的身份和权限,在MyProfile中可以找到,deviceID是你当前设备的ID,点击刚才新建的台灯图标就可以看到。
然后就是编程&下载
(这里吐槽一下官方的历程。。。)
String request = “”;while (client.available()){char c = client.read();request +=c;}if (request!= NULL)没有缩进我就不说什么了,直接判断字符串等不等于NULL这是什么鬼,这是判断字符串是否为空串的办法啊嘞?
好了,书归正传,因为我们使用WIFIManager管理ESP8266的WIFI连接,所以在手机上搜索名为LinkNodeAP的WIFI,没有密码,连接成功之后,在浏览器中输入:10.0.1.1,进入WIFI管理界面,选择第一项Configure WIFI进行WIFI配置即可。
然后回到我们刚才新建的设备的界面,点开小台灯:
点击ON或者OFF即可控制继电器S4的打开与关闭了。 |
|