找回密码
 注册
搜索
查看: 1655|回复: 10

[ARM资料] 通过USB-I2C适配器实现物联网功能(源码下载)!

[复制链接]
发表于 2014-9-2 16:52:48 | 显示全部楼层 |阅读模式
偶然一个机会看到Yeelink这个平台,感觉不错,利用Ginkgo USB-I2C适配器可以读写控制AM2311温湿度传感器以获取环境温湿度,以前已经实现对这个适配器读写控制并在上位机上显示温湿度数据,今天看了下Yeelink的API,不是很复杂,于是就准备将它测的数据上传到Yeelink上;
我将数据上传部分程序封装了下,用起来更简单了,上传数据或者获取数据需要用到的函数如下:

1.        int32_t WINAPI Yeelink_GetApiKey(const char *pUserName,const char *pPassword);
2.        int32_t WINAPI Yeelink_PostData(const char *pDeviceId,const char *pSensorId,const char *pValue);
3.        int32_t WINAPI Yeelink_GetData(const char *pDeviceId,const char *pSensorId,char *pValue);


你只需要做以下工作就可以使用这些函数了:
1、在Yeelink注册一个账户,这个是必须的哈;
2、新建设备和传感器,找到设备ID和传感器ID,这个在设备管理里面的URL可以看到;
3、通过Ginkgo USB-I2C适配器获取环境中的温湿度值;

完成以上3个步骤后就可以调用这3个函数,实现将数据上传到Yeelink服务器了。
完整程序如下:


1.        // USB_I2C_AM2321B.cpp : 定义控制台应用程序的入口点。
2.        //
3.       
4.        #include "stdafx.h"
5.        #include "ControlI2C.h"
6.        #include "yeelink.h"
7.       
8.       
9.        int _tmain(int argc, _TCHAR* argv[])
10.        {
11.                int ret,i;
12.                VII_INIT_CONFIG I2C_Config;
13.                uint8_t write_buffer[8]={0};
14.                uint8_t        read_buffer[8]={0};
15.                ret = Yeelink_GetApiKey("viewtool","viewtool2013");//输入用户名和密码
16.                if(ret != ERR_SUCCESS){
17.                        printf("Get api key error!");
18.                        return ret;
19.                }
20.                //扫描已经连接的设备
21.                ret = VII_ScanDevice(1);
22.                if(ret <= 0)
23.                {
24.                        printf("No device connect!\n");
25.                        return ret;
26.                }
27.            //打开设备
28.            ret = VII_OpenDevice(VII_USBI2C, 0, 0);
29.            if (ret != ERR_SUCCESS)
30.            {
31.                printf("Open device error!\n");
32.                return ret;
33.            }
34.            //初始化设备(硬件控制模式)
35.            I2C_Config.AddrType = VII_ADDR_7BIT;
36.            I2C_Config.ClockSpeed = 100000;
37.            I2C_Config.ControlMode = VII_HCTL_MODE;
38.            I2C_Config.MasterMode = VII_MASTER;
39.            I2C_Config.SubAddrWidth = VII_SUB_ADDR_NONE;
40.            ret = VII_InitI2C(VII_USBI2C, 0, 0, &I2C_Config);
41.            if (ret != ERR_SUCCESS)
42.            {
43.                printf("Initialize device error!\n");
44.                return ret;
45.            }
46.                //循环读取温湿度数据
47.                while(1)
48.                {
49.                        uint8_t write_buffer[8] = {0};
50.                //Wake up AM2311 sensor
51.                VII_WriteBytes(VII_USBI2C, 0, 0, 0xB8, 0x00, write_buffer, 1);
52.                //Send out read temperature and huminity command
53.                write_buffer[0] = 0x03;
54.                write_buffer[1] = 0x00;
55.                write_buffer[2] = 0x04;
56.                ret = VII_WriteBytes(VII_USBI2C, 0, 0, 0xB8, 0x00, write_buffer, 3);
57.                if (ret != ERR_SUCCESS)
58.                {
59.                    printf("Write data error!\n");
60.                    return ret;
61.                }
62.                // Read out temperature and huminity
63.                        uint8_t read_buffer[8] = {0};
64.                ret = VII_ReadBytes(VII_USBI2C, 0, 0, 0xB8, 0x00, read_buffer, 8);
65.                if (ret != ERR_SUCCESS)
66.                {
67.                    printf("Read data error!\n");
68.                    return ret;
69.                }
70.                else
71.                {
72.                    double t = ((read_buffer[4] << 8) | read_buffer[5]) / 10.0;
73.                    system("cls");
74.                    printf("温度值:%.1f ℃\n",t);
75.                    double h = ((read_buffer[2] << 8) | read_buffer[3]) / 10.0;
76.                    printf("湿度值:%.1f %\n",h);
77.                                Sleep(10000);
78.                                char StrTmp[1024]={0};
79.                                sprintf(StrTmp,"%.1f",t);
80.                                ret = Yeelink_PostData("9433","14860",StrTmp);//输入设备ID和传感器ID,以及传感器数据
81.                                if(ret != ERR_SUCCESS){
82.                                        printf("Post data error!");
83.                                }
84.                                sprintf(StrTmp,"%.1f",h);
85.                                ret = Yeelink_PostData("9433","14861",StrTmp);//输入设备ID和传感器ID,以及传感器数据
86.                                if(ret != ERR_SUCCESS){
87.                                        printf("Post data error!");
88.                                }
89.                }
90.                }
91.                return 0;
92.        }
93.       
94.       
通过Yeelink获取到的数据截图如下:




程序完整工程下载(VS2010):

(viewtool论坛)

通过USB-I2C适配器实现物联网功能(源码下载)!
http://www.viewtool.com/bbs/forum.php?mod=viewthread&tid=5089&fromuid=18207

www.viewtool.com
发表于 2014-9-12 15:42:09 | 显示全部楼层
帮楼主顶一下。

点评回复

使用道具 举报

 楼主| 发表于 2014-9-22 16:19:33 | 显示全部楼层
USB-I2C适配器实现物联网功能(源码下载)!
点评回复

使用道具 举报

 楼主| 发表于 2014-10-8 17:10:38 | 显示全部楼层
通过USB-I2C适配器实现物联网功能(源码下载)!
点评回复

使用道具 举报

 楼主| 发表于 2014-10-22 16:37:25 | 显示全部楼层
通过USB-I2C适配器实现物联网功能(源码下载)!
点评回复

使用道具 举报

 楼主| 发表于 2014-10-31 16:11:54 | 显示全部楼层
www.viewtool.com
点评回复

使用道具 举报

 楼主| 发表于 2014-11-8 14:31:18 | 显示全部楼层
利用Ginkgo USB-I2C适配器可以读写控制AM2311温湿度传感器以获取环境温湿度,
点评回复

使用道具 举报

 楼主| 发表于 2014-11-17 12:41:02 | 显示全部楼层
[em01] [em01] [em01]
点评回复

使用道具 举报

 楼主| 发表于 2014-12-11 14:58:45 | 显示全部楼层
               顶一个
点评回复

使用道具 举报

 楼主| 发表于 2015-1-14 15:03:18 | 显示全部楼层
通过Ginkgo USB-I2C适配器获取环境中的温湿度值
点评回复

使用道具 举报

 楼主| 发表于 2015-1-29 16:10:11 | 显示全部楼层
利用Ginkgo USB-I2C适配器可以读写控制AM2311温湿度传感器以获取环境温湿度
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-12-28 09:22 , Processed in 0.046145 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表