通过mqtt再利用移动oneNet平台的连接与数据收发

这里oneNet平台作为服务器esp8266作为下位机将获得的数据上传至移动oneNet平台。上位机方面做了一个简单的c#winform程序来获取设备状态和下位机上传的数据。

 一、整个项目使用的通讯协议。

上位机与服务器使用的是http协议,下位机与服务器使用的mqtt协议。

二、oneNet平台的搭建

首相是注册一个平台账号,然后再登录,之后就是创建设备,在创建设备这里使用的是多协议接入设备(相关注册与数据流之类的详情就不在赘述)。下面是注册好之后的效果图。

 

 这个时候可以用mqtt.fx程序测试以下能否连接上。

连接设置如下

三、库文件准备

 #include <PubSubClient.h>主要用到mqtt的库

四、功能代码

4.1 连接

const char *Device_ID = "xxxxxx";         //设备ID
const char *Product_ID = "xxxxxx";        //产品ID
const char *Api_KEY = "xxxxxxx";           //鉴权信息
const char *WiFi_SSID = "xxx";         //WiFi名称
const char *WiFi_Password = "xxxxxxxx";  //WiFi密码
char* pub="$dp";                   //发布主题名

4.2上传数据

上传我也是估摸着用,不是很了解,只是知道能够这样上传,而且手册里也没说到这种上传我就只能瞎用了,各位可以自己深入了解再来教教我!!!嘻嘻

//这是我其中一个上传部分的代码
void pubBmp()
{
  if (millis() - Last_Updata_Time >= 0)
  {
    Last_Updata_Time = millis();
    memset(Upload_Package, 0, 100);
    String Json_Buffer = ",;temp2,"+String(temp2)+",;pressure,"+String(pressure)+",;altitude,"+String(altitude)+";";
//由于不太会jason语句就直接使用网上其他大佬提供的办法,这里格式都是固定的,都是“,;变量名,”+格式类型(变量值)最后以";"结尾就行,一次可以上传多个。
    Upload_Package[0] = 5;
    Upload_Package[1] = highByte(Json_Buffer.length());
    Upload_Package[2] = lowByte(Json_Buffer.length());  
    for (int i = 0; i < Json_Buffer.length(); i++)
    Upload_Package[i + 3] = Json_Buffer.c_str()[i];
    client.publish(pub, Upload_Package, Json_Buffer.length() + 3);
  }
}

4.3获取数据

这里获取数据用的是http协议在上位机获取。同时还有上位机发送数据。

首先是获取数据。这里用的是c#的代码用到的协议是http,将获取的Jason语句解析后调用。

        
public void getDevDate()
        {
            string url = "http://api.heclouds.com/devices/datapoints?devIds=932938880";//请求地址
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.Method = "GET";
            SetHeaderValue(request.Headers, "api-key", "DmeBqDy=wOEj3oreThNecuJKv1g=");//设备API地址和 首部参数
            request.Host = "api.heclouds.com";
            request.ProtocolVersion = new Version(1, 1);
            request.ContentType = "text/html;charset=UTF-8";
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream myResponseStream = response.GetResponseStream();
            StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
            string retString = myStreamReader.ReadToEnd();
            AnalysisT(retString);
            //Console.WriteLine(retString);
            myStreamReader.Close();
            myResponseStream.Close();
        }

第二个是通过http协议上传数据。

        public void UpGps(string lon,string lat)
        {
            string url = "http://api.heclouds.com/devices/932938880/datapoints";
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.Method = "POST";
            SetHeaderValue(request.Headers, "api-key", "DNDuXRJFXk7FXEytb7=lxKcncZM=");//设备API地址和 首部参数
            request.Host = "api.heclouds.com";
            request.ProtocolVersion = new Version(1, 1);
            string Cod = "{\"datastreams\":[{\"id\":\"location\",\"datapoints\":[{\"value\":{\"lon\":"+lon.ToString()+",\"lat\":"+lat.ToString()+"}}]}]}";

            byte[] data = Encoding.UTF8.GetBytes(Cod);
            request.ContentLength = data.Length;
            using (Stream reqStream = request.GetRequestStream())
            {
                reqStream.Write(data, 0, data.Length);
                reqStream.Close();
            }

            HttpWebResponse resp = (HttpWebResponse)request.GetResponse();
            Stream stream = resp.GetResponseStream();
            //获取响应内容 
            using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
            {
                //label1.Text = reader.ReadToEnd();
                Console.WriteLine(reader.ReadToEnd());
            }
        }

这就是项目的大概内容,写得比较乱请见谅,有问题欢迎私信或者qq331388572

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值