国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

yeelink在PX2上的運用(遠程控制)

發(fā)布時間:2015-7-16 17:39    發(fā)布者:穿prada的008
關鍵詞: 遠程控制
首先介紹yeelink,這嘛,是一個開放的云服務器平臺,大家都可以去注冊一個自己的賬號,然后就可以使用它的服務器就是,只要你的設備能夠聯(lián)網(wǎng),無論你人在哪里,就能從網(wǎng)絡上控制你的設備,而它就提供各種API接口,我們只要熟悉一點tcp的編程我們就可以簡單使用了,另外值得注意的一點是,yeelink也可以在微信公眾號上查看,修改我們的設備,十分簡便。
官網(wǎng)是這個,http://www.yeelink.net/ ,注冊完之后我們進入用戶中心就可以看到這樣的界面

而在賬戶中找到我們的apikey,這個值在編程時會用到,另外在設備管理中,我們可以創(chuàng)建自己的設備,選擇在設備里創(chuàng)建個自己的傳感器,可選擇數(shù)值型和開關型等,如下,可以在傳感器的這個位置,看到設備的ID,和傳感器的ID,這兩個值也是需要的
  
然后我們先測試下通信是否能成功,可以使用網(wǎng)絡助手作為一個服務器端,作為一個設備向yeelink服務器發(fā)送命令
下面兩個命令中一個是發(fā)送數(shù)值到服務器,一個是從服務器獲取數(shù)值,通信成功的效果如下,若通信失敗的話,可以嘗試重新獲取下apikey的值,在賬戶那邊可以重新獲取。(記得將下面的ID值和apikey值改為自己的)
   
然后我們就可以寫個tcp通信程序,并且將設備的開啟加入其中了,樓主這里就簡單用個GPIO口做個例子,如果想的話,我們也可以寫個溫度檢測的程序,然后通過微信實時檢測家里或某個地方的溫度。
程序如下
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define portnumber 80//yeelink的服務器端口
#define DEVICE_NAME     "/dev/rkpx2_GPIO"http://gpio的設備,提供的kernel已包含,里面定義里gpio4的1234四個引腳,這里用到1引腳
int main(int argc,char *argv[])
{         
    int sockfd//tcp進程號
    int fd//gpio的設備號
    int recdata//收到的數(shù)據(jù)長度
    char *addr//一個字符型指針,用來找數(shù)據(jù)value的位置,后面的值即是網(wǎng)站上按鍵的值
    int offset//value的長度,以便找到按鍵值
    char *yeelink//yeelink服務器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:××××××××××××(這里請用自己的APIKEY代替包括前面的ID)\r\n\r\n{\"value\":0}\r\n" /* 發(fā)送用到的數(shù)據(jù) */
    struct hostent *host
        fprintf(stderr,"start")
    while(1){//循環(huán)起來,每隔5s讀一次按鍵值
            if((host=gethostbyname(yeelink))==NULL)//獲取服務器地址
            {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)//申請連接
                {
                fprintf(stderr,"connect Error:%s\a\n",strerror(errno))
                exit(1)
            }
        send(sockfd,send_data1,sizeof(send_data1),0)//將http文件頭發(fā)過去
         recdata = recv(sockfd, recv_data, sizeof(recv_data), 0)//接受服務器返回的數(shù)值
        recv_data[recdata]=' '//加上結束符        
        addr = strstr(recv_data,"\"value\"")//在接受到的數(shù)據(jù)中找到按鍵值的位置,即value,收到數(shù)據(jù)的樣式如下{“value”:key}
        offset=strlen("\"value\":")//判斷value的長度,
        flag = *(addr + offset) //找到按鍵的值,賦值給flag
        fprintf(stderr,"the value is %c \n")
        close(sockfd)//關閉socket,記住,這里得提前關閉,不然會發(fā)生段錯誤。
        fd=open(DEVICE_NAME,O_RDWR)//打開GPIO設備
            if (fd==-1){
        fprintf(stderr,"open devices %s error\n",DEVICE_NAME)
    }
        if(flag=='1'){//判斷flag的值,然后執(zhí)行相應的操作
        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)//延時10s,讓實驗效果更明顯
        close(fd)
}
        exit(0)
}
因為是用GPIO口的,用的是板上的GPIO4_1樓主也不好加圖片,所以效果就不演示了,但是已驗證可行,樓主用的使用的kernel和程序文件如下,都放壓縮包里了,有興趣可以下載過去研究下,壓縮包中的文件一個是kernel,這個是支持VGA顯示的,而且包含了樓主的一個GPIO驅(qū)動,在程序中會用到,一個是源碼,我們可以在源碼包中編譯出可執(zhí)行文件,最后一個是可執(zhí)行文件,可以用adb工具push進板中,然后執(zhí)行起來就可以了,當然,這里是樓主自己的帳號,ID ,APIKEY都是樓主帳號的,所以你們想用的話,就得修改下,只需要在程序中改這三個值便行,然后就可以使用自己帳號的設備 控制,
yeelink.zip (3.89 MB)
測試時的部分圖片如下,按那個開關會改變GPIO端口的值,而改變端口時,debug口也會有提示,這里也會有提示,大家可以使用這個端口電平的改變,控制燈,蜂鳴器之類的。
      
現(xiàn)在說說程序中樓主遇到的幾個錯誤。
1.發(fā)送過去的http文件頭,在{"value":**}的前面要有兩個回車,這個別漏了,這是格式要求,漏了就沒法正常把值放到服務器了
2.獲取服務器的值的時候,我們得在服務器中的值處理,因為他發(fā)過來的值時沒有結束符的,所以我們得手動加上結束符。

本文地址:http://www.qingdxww.cn/thread-151483-1-1.html     【打印本頁】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內(nèi)容、版權和其它問題,我們將根據(jù)著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區(qū)
  • 無線充電基礎知識及應用培訓教程2
  • 為何選擇集成電平轉換?
  • 安靜高效的電機控制——這才是正確的方向!
  • 無線充電基礎知識及應用培訓教程3
  • 貿(mào)澤電子(Mouser)專區(qū)
關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品高清一区二区三区 | 高清一级毛片免免费看 | 欧美国产成人免费观看永久视频 | 可以免费在线看黄的网站 | 国产欧美日韩精品一区二区三区 | 欧美另类videos高清精品 | 99久久好看一级毛片 | 国产小视频国产精品 | 手机看片在线精品观看 | 久久精品一本到99热免费 | 欧美噜噜| 成人国产一区二区 | 国产精品手机视频一区二区 | 国产九九精品视频 | 丁香午夜婷婷 | 欧美日韩国产一区二区三区播放 | 成人欧美一区二区三区视频 | 国产视频 每日更新 | 亚洲欧美日韩精品久久奇米色影视 | 国产精品美女网站在线观看 | 国产精品免费观看视频播放 | 欧美激情免费观看一区 | 青青草国拍2019 | 亚洲午夜久久久久久91 | 国产我不卡 | 中国一级片在线观看 | 亚洲精品综合久久中文字幕 | 红纸鹤免费高清在线观看 | 综合 欧美 亚洲日本 | 国产精品日韩一区二区三区 | 2023天天操 | 四虎影视免费在线观看 | 日韩在线观看免费 | 家庭教师第二季 | 国产精品免费观看视频播放 | 国产精品成人va在线观看 | 99在线视频免费 | 黄页网址在线观看 | 国产黄在线免费观看 | 自拍偷拍亚洲区 | 四虎影视4hutv最新地址在线 |