查看: 7|回复: 0

LinkNode R4 试用(1)

[复制链接]

主题

好友

204

积分

秀才

  • TA的每日心情
    开心
    2018-1-10 11:10
  • 签到天数: 20 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2016-9-19 08:45:40 |显示全部楼层
    前段时间申请了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("POST /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的打开与关闭了。
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

    站长推荐上一条 /3 下一条

    手机版|电路城

    GMT+8, 2019-5-22 01:56 , Processed in 0.101681 second(s), 15 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz!

    返回顶部