yeelink在PX2上的运用(远程控制)

首先介绍yeelink,这嘛,是一个开放的云服务器平台,大家都可以去注册一个自己的账号,然后就可以使用它的服务器就是,只要你的设备能够联网,无论你人在哪里,就能从网络上控制你的设备,而它就提供各种API接口,我们只要熟悉一点tcp的编程我们就可以简单使用了,另外值得注意的一点是,yeelink也可以在微信公众号上查看,修改我们的设备,十分简便。

官网是这个,http://www.yeelink.net/ ,注册完之后我们进入用户中心就可以看到这样的界面

而在账户中找到我们的apikey,这个值在编程时会用到,另外在设备管理中,我们可以创建自己的设备,选择在设备里创建个自己的传感器,可选择数值型和开关型等,如下,可以在传感器的这个位置,看到设备的ID,和传感器的ID,这两个值也是需要的

然后我们先测试下通信是否能成功,可以使用网络助手作为一个服务器端,作为一个设备向yeelink服务器发送命令

下面两个命令中一个是发送数值到服务器,一个是从服务器获取数值,通信成功的效果如下,若通信失败的话,可以尝试重新获取下apikey的值,在账户那边可以重新获取。(记得将下面的ID值和apikey值改为自己的)

然后我们就可以写个tcp通信程序,并且将设备的开启加入其中了,楼主这里就简单用个GPIO口做个例子,如果想的话,我们也可以写个温度检测的程序,然后通过微信实时检测家里或某个地方的温度。

程序如下

#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的服务器端口

#define DEVICE_NAME     "/dev/rkpx2_GPIO"//gpio的设备,提供的kernel已包含,里面定义里gpio4的1234四个引脚,这里用到1引脚

int main(int argc,char *argv[])

{

int sockfd//tcp进程号

int fd//gpio的设备号

int recdata//收到的数据长度

char *addr//一个字符型指针,用来找数据value的位置,后面的值即是网站上按键的值

int offset//value的长度,以便找到按键值

char *yeelink//yeelink服务器ip地址

char recv_data[1024]//收到数据的内存

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" /* 发送用到的数据 */

struct hostent *host

fprintf(stderr,"start")

while(1){//循环起来,每隔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文件头发过去

recdata = recv(sockfd, recv_data, sizeof(recv_data), 0)//接受服务器返回的数值

recv_data[recdata]=‘ ‘//加上结束符

addr = strstr(recv_data,"\"value\"")//在接受到的数据中找到按键值的位置,即value,收到数据的样式如下{“value”:key}

offset=strlen("\"value\":")//判断value的长度,

flag = *(addr + offset) //找到按键的值,赋值给flag

fprintf(stderr,"the value is %c \n")

close(sockfd)//关闭socket,记住,这里得提前关闭,不然会发生段错误。

fd=open(DEVICE_NAME,O_RDWR)//打开GPIO设备

if (fd==-1){

fprintf(stderr,"open devices %s error\n",DEVICE_NAME)

}

if(flag==‘1‘){//判断flag的值,然后执行相应的操作

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驱动,在程序中会用到,一个是源码,我们可以在源码包中编译出可执行文件,最后一个是可执行文件,可以用adb工具push进板中,然后执行起来就可以了,当然,这里是楼主自己的帐号,ID ,APIKEY都是楼主帐号的,所以你们想用的话,就得修改下,只需要在程序中改这三个值便行,然后就可以使用自己帐号的设备 控制,

 yeelink.zip

测试时的部分图片如下,按那个开关会改变GPIO端口的值,而改变端口时,debug口也会有提示,这里也会有提示,大家可以使用这个端口电平的改变,控制灯,蜂鸣器之类的。

现在说说程序中楼主遇到的几个错误。

1.发送过去的http文件头,在{"value":**}的前面要有两个回车,这个别漏了,这是格式要求,漏了就没法正常把值放到服务器了

2.获取服务器的值的时候,我们得在服务器中的值处理,因为他发过来的值时没有结束符的,所以我们得手动加上结束符。

时间: 2024-02-20 16:51:29

yeelink在PX2上的运用(远程控制)的相关文章

PopMetal和PX2上运行upstream linux kernel代码

Rockchip的平台,以其强大的性能和丰富的功能,在开源社区大受欢迎,Linux内核对其提供越来越丰富的支持. Linux内核目前发布的最新稳定版本是Linux 4.2,Linux 4.3的合并窗口已经打开,大概下周会发布rc1版本,最终的稳定版本 会在一两个月内发布.在Linux内核的每一个版本中,都会合并国内外大量Linux kernel hacker们为Rockchip平台提交的代码,使得 upstream对Rockchip平台的支持越来越完善. Chipspark打造的两款开发板PX2

【Rayeager PX2分享】PX2上ttys3串口测试程序编写

在PX2开发板上有个已引出的的ttys3,大家如果用PX2来开发或者学习,时不时总是会需要用到这个串口的,而在android系统中,使用串口的方式也很简单,因为在PX2的源码中已经有了ttys3的驱动,我们只需要将起编译进内核(编译fangshihttp://bbs.chipspark.com/forum.p ... =%E4%B8%B2%E5%8F%A3)就可以像操作文件一样,操作这个串口,然后操作这个串口的时候,我们需要做的也只有先做个初始的配置,就是设置波特率,停止位,数据位,奇偶校验.

【Rayeager PX2】PX2上使用GPIO口的例程

之前楼主在论坛中已经分享了简单驱动的编写,现在楼主再来教刚接触板子的新手们如何引用调用GPIO,不过这里楼主并没有将GPIO口的函数封装成库,然后在eclipse上调用,楼主这边的例子,只是简单的用adb工具进入板中,然后用一个测试程序使用端口,有兴趣想要在安卓界面调用端口的,可以参考楼主之前写的那编jni调用的帖子. 首先我们依旧来简单地说下步骤, 1.在/kernel/drivers下建个文件夹,自己创建并添加Kconfig和makefile,内容如下, 2.在该目录下写个gpio驱动,内容

在Rayeager PX2上搭建web服务器anmpp

芯客网出品Rayeager PX2开发板 1.使用root工具获取root权限. 2.安装anmpp.apk http://www.anmpp.net 3.下载anmpp.zip 放到sdcard根目录 4.启动anmpp 应用 Ps(背景图片通过替换 sdcard目录下anmpp.png来修改.) 5.执行高级核心功能中的 anmpp-install 安装 6.启动集成环境.Ps:如果启动不成功,可以进去adb shell,执行anmpp start 7.查看状态 8.访问localhost

【Rayeager PX2】andoid开机logo分析及PX上的实现

PX2烧的系统也是android的时候,那么修改logo的方式也就大同小异啦,楼主也比较闲,就来试试修改logo. 大家都知道android启动界面分三步, 一步是内核的启动logo, 然后是android的启动初始化logo, 最后还有个启动成功的开机动画. 楼主一开始的理解是在PX2上的过程就是,先出现两只小企鹅,然后出现android的字样,然后android这两字会动一下, 首先我们先来改改内核的启动logo,首先我们进入内核的配置界面,在Device Drivers \ Graphic

闲聊物联网

很多人将物联网看作是一种互联网监控,一种互联网数据采集.表面上来看,这没有错.物流网的基础当然是将设备或者模块接入到互联网,在此基础上可以进行远程控制,采集数据等.但这是基础级.物联网的第二级是利用采集到的数据进行产品运行状态的诊断,提供更为专业的维护.保养服务,比如格力董大姐的空调举例就是这类应用,格力比用户还先知道空调有问题.第三级是根据采集到的所有产品数据进行大数据挖掘,从而对每台空调的作运行状态预测,也可以对空调的使用做数据统计.分析和挖掘.通过这些数据的元分析,厂家可以知道空调使用的地

监控 体系

## 监控的必要性 > 在一个IT环境中会存在各种各样的设备,比如:硬件设备,软件设备,系统环境,运行服务.那么在这么复杂的环境下,尤其是大公司里成千上万的服务器我们如何去管理和维护呢?如何能保证公司资源的正常运转?我们通过什么手段去及时掌握基础环境和业务应用的可用性?如何获取到各组件的运行状态(如:CPU使用率,内存的使用率,硬盘的使用率,服务是否运行正常,端口是否存在,带宽流量以及网站访问的状态码),公司业务扩展需要增加服务器又该如何操作呢?等等这些问题都需要有一个系统的工具来帮助我们实现-

中小企业监控体系构建实战(转载)

中小企业监控体系构建实战 高效运维 | 2015-10-28 07:26 编辑 高浩淼(整理) 作者介绍 赵舜东 江湖人称赵班长,曾在武警某部负责指挥自动化的架构和运维工作,2008年退役后一直从事互联网运维工作.曾带团队负责国内某食品电商的运维工作,即将出版的<saltstack入门与实践>作者之一. 主题简介 我们今天的话题是<中小企业监控体系构建实战>,前期分享了<中小企业自动化部署实战>还没有看到的朋友可以先阅读下,这样也能明白为何要定位中小企业.监控这个话题实

修改远程桌面连接的端口号

修改远程桌面连接的端口号 来源  http://www.qscn.net/%E7%BD%91%E7%AB%99%E8%BF%90%E8%90%A5/156.html 1 在服务器上启动3389远程控制,也就是选择控制面板的“添加删除程序”的“添加删除WINDOWS组件”,找到“终端服务器”将其安装后重新启动计算机完成远程控制启动工作. 2 在服务器上通过任务栏的“开始->运行->输入regedit”,打开注册表编辑器. 3 在注册表中找到hkey_local_machine\system\cu