色偷偷偷久久伊人大杳蕉,色爽交视频免费观看,欧美扒开腿做爽爽爽a片,欧美孕交alscan巨交xxx,日日碰狠狠躁久久躁蜜桃

x
x
查看: 4389|回復(fù): 3
打印 上一主題 下一主題

一步步教你使用云端服務(wù)器yeelink遠(yuǎn)程監(jiān)控

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2016-12-30 10:22:39 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
隨著物聯(lián)網(wǎng)逐漸進(jìn)入我們的生活,我們需要隨時隨地查看遠(yuǎn)端的設(shè)備運(yùn)行狀態(tài)及對設(shè)備進(jìn)行控制,Yeelink為我們提供了一
個很好的云端服務(wù)器平臺,設(shè)備通過網(wǎng)絡(luò)連接到Y(jié)eelink服務(wù)器,上傳本地檢測數(shù)據(jù),電腦或手機(jī)通過手機(jī)訪問即可看到設(shè)備數(shù)據(jù),
網(wǎng)上也有很多朋友使用Yeelink來做遠(yuǎn)程監(jiān)控的示例,下面我們來介紹如何使用Yeelink做遠(yuǎn)程檢測與控制,如有錯誤還請大家指正。

下面是Yeelink遠(yuǎn)程監(jiān)控的一個大致框圖

1、首先進(jìn)入Yeelink主頁注冊一個自己的帳號,下面是主頁為我們開發(fā)者提供的一個簡單的開發(fā)流程


2、按照上面的流程點擊添加設(shè)備,輸入設(shè)備信息,在下面的地圖中選擇設(shè)備所在地

3、進(jìn)入到設(shè)備管理界面,設(shè)置設(shè)備圖片,添加傳感器


4、添加傳感器,這里我們添加一個數(shù)值型傳感器和一個開關(guān)型傳感器,通過下面選擇設(shè)置傳感器信息

5、傳感器添加完成之后寶馬1768設(shè)備下面出現(xiàn)兩個傳感器:AD轉(zhuǎn)換值和LED1,AD轉(zhuǎn)換值屬于數(shù)值型傳感器,顯示AD轉(zhuǎn)換電壓,
LED1屬于開關(guān)型傳感器,用于控制寶馬開發(fā)板LED燈亮滅,注意下面標(biāo)記出來的地方藍(lán)色框框第一個是設(shè)備ID即寶馬1768的ID,第
二個為傳感器ID即對應(yīng)AD轉(zhuǎn)換值和LED1各自的ID,由于兩個傳感器同屬于寶馬1768設(shè)備下面的兩個傳感器所以設(shè)備ID相同,而傳感
器ID不同,這幾個ID會在后面編程中使用到


6、進(jìn)入我的賬戶找到API KEY,當(dāng)要進(jìn)行傳輸數(shù)據(jù)時需要使用到該密碼


7、上面Yeelink的設(shè)置基本完成了,就要開始進(jìn)行程序編寫了,這里我們直接使用寶馬開發(fā)板搭建好的TCP客戶端例程進(jìn)行添加修改,
在系統(tǒng)配置完成之后初始化ADC和LED
  • ADC_Init();                                                        //        ADC初始化
  • LPC_GPIO2->FIODIR  = 0x000000ff;    //        LED配置
  • LPC_GPIO0->FIODIR  = 0x00200000;
  • LPC_GPIO0->FIOPIN |= 0x00200000;
  • while(1)
  • {
  •         tcpclient("42.96.164.52",80 ,1);                //AD轉(zhuǎn)換值上傳
  •         tcpclient("42.96.164.52",80 ,2);                //獲取LED狀態(tài)并改變開發(fā)板LED狀態(tài)
  •         rt_thread_delay(RT_TICK_PER_SECOND * 4);        //延時4s
  • }
  • //TCP客戶端實驗
  • int tcpclient(const char* url, int port,int num)
  • {
  •     char *recv_data;
  •     struct hostent *host;
  •     int sock, bytes_received;
  •     struct sockaddr_in server_addr;
  •         int        Buf = 0;
  •     /* 通過函數(shù)入口參數(shù)url獲得host地址(如果是域名,會做域名解析) */
  •     host = gethostbyname(url);
  •     /* 分配用于存放接收數(shù)據(jù)的緩沖 */
  •     recv_data = rt_malloc(BUFSZ);
  •     if (recv_data == RT_NULL)
  •     {
  •         rt_kprintf("No memory\n");
  •         return;
  •     }
  •     /* 創(chuàng)建一個socket,類型是SOCKET_STREAM,TCP類型 */
  •     if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1)
  •     {
  •         /* 創(chuàng)建socket失敗 */
  •         rt_kprintf("Socket error\n");
  •         /* 釋放接收緩沖 */
  •         rt_free(recv_data);
  •         return 1;
  •     }
  •         if(num == 1)                /
  •         {
  •                 Buf   = ADC_Get();
  •                 Buf = (Buf * 3300)/4096;
  •                 INT_CHAR(Buf);
  •                 send_data1[234] = dis[0];                //更改上傳數(shù)據(jù)內(nèi)容即AD值
  •                 send_data1[234+1] = '.';
  •                 send_data1[234+2] = dis[0+1];
  •                 send_data1[234+3] = dis[0+2];
  •         }
  •     /* 初始化預(yù)連接的服務(wù)端地址 */
  •     server_addr.sin_family = AF_INET;
  •     server_addr.sin_port = htons(port);
  •     server_addr.sin_addr = *((struct in_addr *)host->h_addr);
  •     rt_memset(&(server_addr.sin_zero), 0, sizeof(server_addr.sin_zero));
  •     /* 連接到服務(wù)端 */
  •     while (connect(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1)
  •     {
  •         /* 連接失敗 */
  •         rt_kprintf("Connect fail!\n");
  •         lwip_close(sock);
  •          /*釋放接收緩沖 */
  •         rt_free(recv_data);
  •                return 1;
  •     }
  •         rt_kprintf("Connect OK!\n");
  •         if(num == 1)
  •         {
  •                 /* 發(fā)送數(shù)據(jù)到sock連接 */
  •                 if(send(sock,send_data1,strlen(send_data1), 0) < 0)
  •                 {
  •                         /* 發(fā)送失敗,關(guān)閉這個連接 */
  •                         rt_kprintf("\nSend error ");
  •                         lwip_close(sock);
  •                         /* 釋放接收緩沖 */
  •                         rt_free(recv_data);
  •                 }
  •                 else
  •                 {
  •                         rt_kprintf("\nSend OK ");
  •                         bytes_received = recv(sock, recv_data, BUFSZ - 1, 0);
  •                         lwip_close(sock);
  •                         /* 釋放接收緩沖 */
  •                         rt_free(recv_data);
  •                 }
  •         }
  •         else if(num == 2)
  •         {
  •                 /* 發(fā)送數(shù)據(jù)到sock連接 */
  •                 if(send(sock,send_data2,strlen(send_data2), 0) < 0)
  •                 {
  •                         /* 發(fā)送失敗,關(guān)閉這個連接 */
  •                         rt_kprintf("\nSend error ");
  •                         lwip_close(sock);
  •                         /* 釋放接收緩沖 */
  •                         rt_free(recv_data);
  •                 }
  •                 else
  •                 {
  •                         rt_kprintf("\nSend OK ");
  •                         /* 從sock連接中接收最大BUFSZ - 1字節(jié)數(shù)據(jù) */
  •                 bytes_received = recv(sock, recv_data, BUFSZ - 1, 0);
  •                         Buf = Search_str(recv_data,"\"value\":");
  •                         if(recv_data[Buf] == '0')
  •                                 LPC_GPIO2->FIOPIN &= ~0xff;                        //關(guān)閉LED
  •                         else
  •                                 LPC_GPIO2->FIOPIN |= 0xff;                        //打開LED
  •                         rt_kprintf("\n%s ",recv_data+Buf);
  •                         lwip_close(sock);
  •                         /* 釋放接收緩沖 */
  •                         rt_free(recv_data);
  •                 }
  •         }
  •     return 1;
  • }

復(fù)制代碼


8、我們可以看到程序中通過判斷num值來發(fā)送兩個不同的字符串,這里num就是用來區(qū)別是用來上傳AD轉(zhuǎn)換值還是LED狀態(tài)獲取的
下面看看兩個字符串?dāng)?shù)據(jù),我們可以看到下面兩個字符串中第一行都出現(xiàn)了我們設(shè)備的ID和傳感器ID,send_data1對應(yīng)是AD轉(zhuǎn)換值
上傳,所以ID為20165,而send_data2為LED控制,ID對應(yīng)為20166,U-ApiKey后面緊跟著就是我們上面在賬戶設(shè)置里面的密碼,
Yeelink的API格式比較固定,至于其他一些參數(shù)可以參考Yeelink API文檔
  • char send_data1[300] = "POST /v1.0/device/12402/sensor/20165/datapoints HTTP/1.1\r\n\
  • Host: api.yeelink.net\r\n\
  • Accept: */*\r\n\
  • U-ApiKey: 615e52feacb3a8b18ab424703c00bfbf\r\n\
  • Content-Length: 14\r\n\
  • Content-Type: application/json;charset=utf-8\r\n\
  • Connection: close\r\n\
  • \r\n\
  • {\"value\":96  }\r\n"; /* 發(fā)送用到的數(shù)據(jù) */
  • 這里有一點需要注意的是Content-Length的長度必須為”value”后面跟著字符串的長度值加10,上面設(shè)置為14即”value”后面的值為4位,
  • 這里初始化是”96  “
  • char send_data2[300] = "GET /v1.0/device/12402/sensor/20166/datapoints HTTP/1.1\r\n\
  • Host: api.yeelink.net\r\n\
  • Accept: */*\r\n\
  • U-ApiKey: 615e52feacb3a8b18ab424703c00bfbf\r\n\
  • Content-Length: 0\r\n\
  • Connection: close\r\n\
  • \r\n\
  • print get done.\r\n"; /* 發(fā)送用到的數(shù)據(jù) */

復(fù)制代碼


另外還有一點需要注意的是,當(dāng)我們查詢LED狀態(tài)時需要接收Yeelink服務(wù)器數(shù)據(jù),那么數(shù)據(jù)的哪部分才是對我們有用的呢,我們可以使用
網(wǎng)絡(luò)調(diào)試助手,將調(diào)試助手連接到Y(jié)eelink服務(wù)器,發(fā)送字符串send_data2的內(nèi)容,即可獲取服務(wù)器返回消息,其中”value”后面的0是我們
需要的數(shù)據(jù),表明現(xiàn)在開關(guān)是關(guān)著的,若開關(guān)打開則返回為1



9、上面Yeelink設(shè)置和程序都介紹完了,下面就開始測試了下面是電腦顯示波形


手機(jī)可以查看設(shè)備地址




下面在看一下LED控制


沙發(fā)
發(fā)表于 2016-12-30 11:29:44 | 只看該作者
跟智能更進(jìn)一步,有app。
板凳
 樓主| 發(fā)表于 2017-1-3 11:13:31 | 只看該作者
旺寶科技測試丘 發(fā)表于 2016-12-30 11:29
跟智能更進(jìn)一步,有app。

有的,這些都會更新起來的。
地板
 樓主| 發(fā)表于 2017-1-3 11:14:01 | 只看該作者
來,來,來,搶個沙發(fā)來坐坐。。
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表