查看: 3871|回复: 2

【Dfrobot Sim808板卡测试报告】之三《MQTT上送LM35温度至物联...

[复制链接]
  • TA的每日心情
    开心
    2018-11-28 10:20
  • 签到天数: 262 天

    [LV.8]以坛为家I

    发表于 2017-2-2 00:45 | 显示全部楼层 |阅读模式
    本帖最后由 沧海笑1122 于 2017-2-4 23:36 编辑

    【时间】2016-春节期间
    【硬件】
    1、DFRobot SIM808板卡   1块  (来自DF评测)
    2、DFRobot Leonardo & Xbee R3     1块 (来自DF评测)
    3、LM35温度传感器  1只
    4、LED一只(带220欧姆限流电阻)
    5、包板、杜邦线     若干
    硬件接线:
    (1)SIM808板卡与UNO叠装,外加9V独立电源。
    (2)A4为LM35温度传感器模拟输入
    (3)LED接D13,用于显示数据上送

    【软件】
    1、来自:https://github.com/Gabriellavoura/Mqtt-and-Sim800-900
    Basic MQTTexample。进行了修改以及补充完善。其中库,各位玩家可以去以上链接下载。
    2、因为使用arduino leonardo,所以使用了serial1,在库中修改了一处。即:默认波特率改为9600。(原库为115300,导致连接失败),另外例题中的声明有误,我已经改过来了,一共这两处,在代码中有备注。
    3、关于物联网网站,在我的第一篇报告中已经介绍,这次为了本报告,我又增设了一个设备、增加了一个传感器(LM352),当然又获取了一个新的设备序列号,同时设置了协议为MQTT
    网站截图1.png 网站截图2.png 微信告警.png
    【软件的基本想法】
    原理框图.png
    代码:

    kittenblock中小学创客名师推荐的图形化编程软件

    /*
     * from: https://github.com/Gabriellavoura/Mqtt-and-Sim800-900
     Basic MQTT example
     
      - connects to an MQTT server
      - publishes "hello world" to the topic "test/out"
      - subscribes to the topic "test/in"
    ******************************* 
    *  2017-01-31
    *  采用sim808+leo板,lm35接入,mqtt协议测试,为gps数据上送做准备
    *  序列号:4G***********OBH(请用您申请到的设备序列号,个人用户是免费的)
    *  json格式:{"sensorDatas":[{"value":23.04}]}
    *  上送间隔:20S
    *  LED13显示上送过程,闪动一次上送一次,如果灯灭则本次十组数据上送完毕
    */
     
    //定义数据接入点,本例采用中国移动
    #define GSMAPN "cmnet"
    #define GSMUSER ""
    #define GSMPASSWORD ""
    //定义库,重点是 <sim800Client.h>
    #include <Time.h>
    #include <sim800Client.h>
    #include <PubSubClientHotlog.h> //此处做了修改,原例题为#include <PubSubClien.h>编译报错
    #include <TimeAlarms.h> //原例题使用,本文未用,但为了编译顺利,没有去除
     
    sim800Client s800;//定义一个client实例
    char imeicode[16];
    char server[] = "t.tlink.io";
     
    //*********关于连接的管理
    unsigned long lastConnectionTime = 0;          // last time you connected to the server, in milliseconds
    const unsigned long postingInterval = 10*2000; // delay between 2 datapoints, 20s
    int sendnum=1; //发送次数
    int sendsum=10;//发送总次数,10次
    //关于LM35变量*************温度传感器部分设置
    int potPin = 4;                     //设置模拟口4为LM35的信号输入端口
    float temperature = 0;                //设置temperature为浮点变量
    long val=0;                       //设置val为长整数变量
     
     
    void callback(char* topic, byte* payload, unsigned int length) {
      // handle message arrived
      char mypl[48];
      Serial.println(length);
      memcpy(mypl,payload,length);
      mypl[length]=char(0);
      Serial.print("receive: ");
      Serial.print(topic);
      Serial.print("->");
      Serial.println(mypl);
    }
     
    PubSubClient client(server, 1883, callback, s800); //设置一个client实例,命名为s800,连接.tlink.io:1883
     
    void setup()
    {
      Serial.begin(9600);
      Serial.println("SIM800 Shield testing.");
      pinMode(13, OUTPUT); //用于显示数据上送
      for (int i=0; i<10; i++){
        delay(5000);
        Serial.println("try to init sim800");
    //判断是否是硬串口,leo采用serial1
    #ifdef HARDWARESERIAL
        if (s800.init( 7, 6)) break;
    #else
        if (s800.init(&Serial1 , 7, 6)) break;
    #endif
     
      }
     
      Serial.println("try to setup sim800");
      s800.setup();
      s800.stop();
      s800.TCPstop();
      s800.getIMEI(imeicode);
      Serial.print("IMEI: ");
      Serial.println(imeicode);
     
    //建立TCP连接,接入点cmnet
      while (!s800.TCPstart("cmnet","","")) {
        Serial.println("TCPstart failed");
        s800.TCPstop();
        delay(1000);
      }
      Serial.println("TCPstart started");
     
      while (!client.connect(imeicode)) {
        Serial.println("connect failed");
        delay(1000);
      }
     
      Serial.println("connected");
     
     
    }
     
    void loop()
     {
       val=analogRead(potPin);//温度传感器LM35接到模拟PIN4上;val变量为从LM35信号口读取到的数值
       delay(200);
       if((millis() - lastConnectionTime > postingInterval)&(sendnum<sendsum)) { //达到发送间隔时间且不到sendsum次,则发送
          temperature = (val*0.0048828125*100);//温度转换,系数基于5V--1024的比例关系,详见极客工坊温度传感器笔记,本文未做标定
          sendData(temperature);
          sendnum=sendnum+1;
      }
           client.loop();
    }
     
    void sendData(float thisData) {
          String msg =  "{\"sensorDatas\":[{\"value\":";  //mqtt head
          char s_temp[5];
          dtostrf(thisData,2,2,s_temp);//把温度值转换为两位整数,两位小数的字符串
          msg+= s_temp;
          msg+="\" }] }";//结束符,具体在tlink中API定义
          char mqttmsg[40];
          msg.toCharArray(mqttmsg,40); //Copies the string's characters to the supplied buffer.
          delay(1000);
     //发布一组数据,标题是设备序列号,内容是json格式的传感器数据
      client.publish("4G***********OBH",mqttmsg);
      lastConnectionTime = millis();
      Serial.println(mqttmsg);
      digitalWrite(13, HIGH);   // LED13闪动,显示数据上送
      delay(1000);                    
      digitalWrite(13, LOW);   
     
    }


    【效果】
    效果如下如图,其中跳变的那一个点是用手指触碰后的结果。
    串口助手.png 历史数据.png
    微信告警1.png
    微信告警是来自于对阈值告警的设置,是在网站侧完成的。我最初申请评测时的GPS电子围栏完全可以用类似思路实现。技术没有任何问题。
    【评测感想】
    1、用sim808上送物联网,我写了两篇。目的就是希望尝试sim808对于物联网不同的玩法。如第二篇报告所说,现存的遗憾就是没有实现sim808读取gps数据后,用mqtt协议送至物联网。
    但我坚信一定是可以做到的,我在https://www.adafruit.com/看到了类似的物联网应用,对此有信心,也希望和各位玩家交流。
    2、这款sim808,是融合度很高的板子(GSM\GPS\GPRS),支持2G网络,玩玩语音,做一个很酷的复古手机,我想都可以进一步尝试,网上也有类似的作品(含3D打印外壳)。
    但是,DF出品的这款SIM808,我猜想是希望对标adafruitFONA以及seeed的同类产品。www.adafruit.com已经在物联网布局上走了很远,做了很多扎实的工作。https://io.adafruit.com/无论从文档\API还是教程、物联网产品都做得很不错。建议DF可以借鉴。比如结合树莓派的相机(照片上传物联网),gps位置上送等。
    https://learn.adafruit.com/search?q=mqtt&
    客官点击一下这个链接,就可以看到adafruit已经做了很多工作了。
    在此并非给adafruit做广告,恰恰相反,我衷心希望国产一线品牌dfrobot能够做得更好,走得更远。
       一共三篇的评测到此暂时告一段落。感谢这次arduino.cn社区、DF官方提供评测的机会。除了DF库的所有基础例题外,还尝试了两种方法数据上送物联网以及短信和GPS相结合的玩法。其中一键发送位置短信是完成度较高的一个小玩具。
        这次评测中,关于DFsim808库的咨询,得到了andy zhouDF产品经理)的指导,令我感受到专业精神。有这样的团队,令我对DF充满信心。
       DFarduino.cn社区以及孝肃师兄和各位sim808评测小伙伴春节快乐。假日结束了,也是我的放松之旅、减压之旅。充电结束,即将奔赴丁酉年的漫漫旅途。
       沧海抱拳。

    打赏作者鼓励一下!
  • TA的每日心情

    2018-1-11 13:58
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    发表于 2017-2-3 11:40 | 显示全部楼层
    春节期间做的测评~感谢感谢!
    打赏作者鼓励一下!

    该用户从未签到

    发表于 2017-8-30 10:23 | 显示全部楼层
    你好,我最近也在研究这方面的东西,我用的是UNO 还有SIM900a 请问一下有什么需要注意的?我把您的串口1直接换成了UNO上的串口0会不会有什么问题我测试过是一值try to setup sim800会不会是接线上面出现了什么差错吗?谢谢
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    KittenBot杯第六届开源硬件开发大赛启动啦
    KittenBot杯第六届开源硬
    大赛简介: 第六届开源硬件开发大赛由Arduino中文社区发起 由KittenBot冠名赞助
    关于arduino编译问题
    关于arduino编译问题
    编译示例程序老是这个问题,换了电脑都不行
    莫名乱码 —— Arduino+RFID-RC522 读写实验
    莫名乱码 —— Arduino+RF
    目标:想把自己房间门改成感应门锁 器材:Arduino Uno (淘宝七星虫LY-F2)、RFID-RC
    [blinker开发实战2]数据反馈
    [blinker开发实战2]数据反
    [md] ### 添加DIY组件 在编辑模式下,点击按键进入编辑组件页面,可以看到 **按键
    用Arduino控制PS2无线手柄为什么一直连接不上
    用Arduino控制PS2无线手柄
    用Arduino UNO板 连接PS2手柄接收器,为什么指示灯已经显示对接上了,但是打开串口监
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表