今天就跟大家聊聊有關(guān)yeelink在PX2上的運(yùn)用是怎樣的,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
創(chuàng)新互聯(lián)主要從事成都做網(wǎng)站、成都網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)林芝,10多年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來(lái)電咨詢建站服務(wù):18982081108
首先介紹yeelink,這嘛,是一個(gè)開(kāi)放的云服務(wù)器平臺(tái),大家都可以去注冊(cè)一個(gè)自己的賬號(hào),然后就可以使用它的服務(wù)器就是,只要你的設(shè)備能夠聯(lián)網(wǎng),無(wú)論你人在哪里,就能從網(wǎng)絡(luò)上控制你的設(shè)備,而它就提供各種API接口,我們只要熟悉一點(diǎn)tcp的編程我們就可以簡(jiǎn)單使用了,另外值得注意的一點(diǎn)是,yeelink也可以在微信公眾號(hào)上查看,修改我們的設(shè)備,十分簡(jiǎn)便。
官網(wǎng)是這個(gè),http://www.yeelink.net/ ,注冊(cè)完之后我們進(jìn)入用戶中心就可以看到這樣的界面
而在賬戶中找到我們的apikey,這個(gè)值在編程時(shí)會(huì)用到,另外在設(shè)備管理中,我們可以創(chuàng)建自己的設(shè)備,選擇在設(shè)備里創(chuàng)建個(gè)自己的傳感器,可選擇數(shù)值型和開(kāi)關(guān)型等,如下,可以在傳感器的這個(gè)位置,看到設(shè)備的ID,和傳感器的ID,這兩個(gè)值也是需要的
然后我們先測(cè)試下通信是否能成功,可以使用網(wǎng)絡(luò)助手作為一個(gè)服務(wù)器端,作為一個(gè)設(shè)備向yeelink服務(wù)器發(fā)送命令
下面兩個(gè)命令中一個(gè)是發(fā)送數(shù)值到服務(wù)器,一個(gè)是從服務(wù)器獲取數(shù)值,通信成功的效果如下,若通信失敗的話,可以嘗試重新獲取下apikey的值,在賬戶那邊可以重新獲取。(記得將下面的ID值和apikey值改為自己的)
然后我們就可以寫(xiě)個(gè)tcp通信程序,并且將設(shè)備的開(kāi)啟加入其中了,樓主這里就簡(jiǎn)單用個(gè)GPIO口做個(gè)例子,如果想的話,我們也可以寫(xiě)個(gè)溫度檢測(cè)的程序,然后通過(guò)微信實(shí)時(shí)檢測(cè)家里或某個(gè)地方的溫度。
程序如下
#include<stdlib.h>
#include<stdio.h>
#include<errno.h>
#include<netdb.h>
#include<string.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include <fcntl.h>
#include<string.h>
#define portnumber 80//yeelink的服務(wù)器端口
#define DEVICE_NAME "/dev/rkpx2_GPIO"//gpio的設(shè)備,提供的kernel已包含,里面定義里gpio4的1234四個(gè)引腳,這里用到1引腳
int main(int argc,char *argv[])
{
int sockfd//tcp進(jìn)程號(hào)
int fd//gpio的設(shè)備號(hào)
int recdata//收到的數(shù)據(jù)長(zhǎng)度
char *addr//一個(gè)字符型指針,用來(lái)找數(shù)據(jù)value的位置,后面的值即是網(wǎng)站上按鍵的值
int offset//value的長(zhǎng)度,以便找到按鍵值
char *yeelink//yeelink服務(wù)器ip地址
char recv_data[1024]//收到數(shù)據(jù)的內(nèi)存
char flag//按鍵值
yeelink="42.96.164.52"
struct sockaddr_in server_addr
struct sockaddr_in cilent_addr
char send_data1[300] = "GET /v1.0/device/××××××××/sensor/×××××××/datapoints HTTP/1.1\r\nHost: api.yeelink.net\r\nContent-Length: 11\r\nU-ApiKey:××××××××××××(這里請(qǐng)用自己的APIKEY代替包括前面的ID)\r\n\r\n{\"value\":0}\r\n">
struct hostent *host
fprintf(stderr,"start")
while(1){//循環(huán)起來(lái),每隔5s讀一次按鍵值
if((host=gethostbyname(yeelink))==NULL)//獲取服務(wù)器地址
{fprintf(stderr,"gethostname Error:%s\a\n",strerror(errno))
exit(1)
}
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)//建立socket
{
fprintf(stderr,"socketError:%s\a\n")
exit(1)}
bzero(&server_addr ,sizeof(server_addr))//堆棧初始化,全部化為0
server_addr.sin_family=AF_INET
server_addr.sin_port=htons(portnumber)
server_addr.sin_addr=*((struct in_addr *)host->h_addr)
if(connect(sockfd,(struct sockaddr*)(&server_addr),sizeof( struct sockaddr))==-1)//申請(qǐng)連接
{
fprintf(stderr,"connect Error:%s\a\n",strerror(errno))
exit(1)
}
send(sockfd,send_data1,sizeof(send_data1),0)//將http文件頭發(fā)過(guò)去
recdata = recv(sockfd, recv_data, sizeof(recv_data), 0)//接受服務(wù)器返回的數(shù)值
recv_data[recdata]=' '//加上結(jié)束符
addr = strstr(recv_data,"\"value\"")//在接受到的數(shù)據(jù)中找到按鍵值的位置,即value,收到數(shù)據(jù)的樣式如下{“value”:key}
offset=strlen("\"value\":")//判斷value的長(zhǎng)度,
flag = *(addr + offset) //找到按鍵的值,賦值給flag
fprintf(stderr,"the value is %c \n")
close(sockfd)//關(guān)閉socket,記住,這里得提前關(guān)閉,不然會(huì)發(fā)生段錯(cuò)誤。
fd=open(DEVICE_NAME,O_RDWR)//打開(kāi)GPIO設(shè)備
if (fd==-1){
fprintf(stderr,"open devices %s error\n",DEVICE_NAME)
}
if(flag=='1'){//判斷flag的值,然后執(zhí)行相應(yīng)的操作
ioctl(fd,1)
fprintf(stderr,"the value is %c \n",flag)
}
else
{
ioctl(fd,0)
fprintf(stderr,"the value is %c \n",flag)
}
fprintf(stderr,"please wait 5s\n")
sleep(10)//延時(shí)10s,讓實(shí)驗(yàn)效果更明顯
close(fd)
}
exit(0)
}
因?yàn)槭怯肎PIO口的,用的是板上的GPIO4_1樓主也不好加圖片,所以效果就不演示了,但是已驗(yàn)證可行,樓主用的使用的kernel和程序文件如下,都放壓縮包里了,有興趣可以下載過(guò)去研究下,壓縮包中的文件一個(gè)是kernel,這個(gè)是支持VGA顯示的,而且包含了樓主的一個(gè)GPIO驅(qū)動(dòng),在程序中會(huì)用到,一個(gè)是源碼,我們可以在源碼包中編譯出可執(zhí)行文件,最后一個(gè)是可執(zhí)行文件,可以用adb工具push進(jìn)板中,然后執(zhí)行起來(lái)就可以了,當(dāng)然,這里是樓主自己的帳號(hào),ID ,APIKEY都是樓主帳號(hào)的,所以你們想用的話,就得修改下,只需要在程序中改這三個(gè)值便行,然后就可以使用自己帳號(hào)的設(shè)備 控制,
yeelink.zip
測(cè)試時(shí)的部分圖片如下,按那個(gè)開(kāi)關(guān)會(huì)改變GPIO端口的值,而改變端口時(shí),debug口也會(huì)有提示,這里也會(huì)有提示,大家可以使用這個(gè)端口電平的改變,控制燈,蜂鳴器之類的。
現(xiàn)在說(shuō)說(shuō)程序中樓主遇到的幾個(gè)錯(cuò)誤。
1.發(fā)送過(guò)去的http文件頭,在{"value":**}的前面要有兩個(gè)回車(chē),這個(gè)別漏了,這是格式要求,漏了就沒(méi)法正常把值放到服務(wù)器了
2.獲取服務(wù)器的值的時(shí)候,我們得在服務(wù)器中的值處理,因?yàn)樗l(fā)過(guò)來(lái)的值時(shí)沒(méi)有結(jié)束符的,所以我們得手動(dòng)加上結(jié)束符。
看完上述內(nèi)容,你們對(duì)yeelink在PX2上的運(yùn)用是怎樣的有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。
當(dāng)前文章:yeelink在PX2上的運(yùn)用是怎樣的
當(dāng)前網(wǎng)址:http://www.rwnh.cn/article22/ghcscc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、品牌網(wǎng)站制作、面包屑導(dǎo)航、網(wǎng)頁(yè)設(shè)計(jì)公司、電子商務(wù)、云服務(wù)器
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)