纬图虚拟仪器论坛

 找回密码
 立即注册
搜索
查看: 33009|回复: 1

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

[复制链接]
发表于 2014-4-28 17:32:23 | 显示全部楼层 |阅读模式
偶然一个机会看到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. #include "stdafx.h"
  4. #include "ControlI2C.h"
  5. #include "yeelink.h"


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

复制代码
通过Yeelink获取到的数据截图如下:
温度.jpg
湿度.jpg
程序完整工程下载(VS2010):
VC_USB_I2C_AM2321B_Yeelink.rar (80.29 KB, 下载次数: 43)
回复

使用道具 举报

发表于 2014-4-30 09:58:30 | 显示全部楼层
学习下,不错!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|纬图虚拟仪器

GMT+8, 2024-12-12 07:39 , Processed in 0.117674 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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