基于Arduino与机智云的家居环境远程系统设计(云平台部署)

前言:本文主要介绍如何在机智云平台创建一个智能产品、定义功能数据点、生成mcu代码包并附上修改好的代码、生成app代码编译附上参考代码。
需准备的硬件主要有arduino uno r3、esp8266
连线方式:a0读取模拟电压输入;key1接到d6;key2接到d7;led接到d4;
一、创建项目
1.1 创建新产品
登陆机智云aiot开发平台 dev.gizwits.com 创建智能产品
1.2 进入项目可查看信息
什么是product key、product secret 
product key又称产品标识码,开发者通过机智云后台创建新产品后,自动生成的一个32位字符串。在机智云的数据库中是一个唯一的号码,开发者将productkey写入设备主控mcu后,机智云通过此标识码对设备进行识别并自动完成注册。 
设备接入机智云的前提是,需要机智云认同这个设备。productkey是设备接入机智云的一个重要参数,该参数的基本含义是:一款设备识别码。例如某公司生产空调、热水器,空调和热水器是不同款设备,该公司设备接入机智云,至少需要两个productkey参数。在开发mcu过程中,需要使用到该参数。
http://docs.gizwits.com/zh-cn/quickstart/noun.html
二、添加数据点
根据系统的需求添加数据点,可参考本系统数据点
什么是数据点?
数据点即设备产品的功能的抽象,用于描述产品功能及其参数。创建数据点后,设备与云端通讯的数据格式即可确定,设备、机智云可以相互识别设备与机智云互联互通的数据。
参考:http://docs.gizwits.com/zh-cn/quickstart/usemcu.html
三、进行虚拟设备调试
3.1 创建好数据点后,进行虚拟设备调试
什么是虚拟设备?类似一款仿真器,能够模拟硬件设备。
虚拟设备是机智云云端可自动生成的一个仿真智能硬件,可模拟要开发或正在开发的智能硬件,来进行云端设备控制、手机app控制、上报数据等需求。
开发者或企业研发人员在机智云平台开发时,如果正式的智能硬件产品产品还未完全开发完成,就可以很方便地使用该“虚拟设备”与正式产品的控制app进行调试和验证,加快研发周期,降低研发成本。
https://baijiahao.baidu.com/s?id=1725343397578131479&wfr=spider&for=pc
3.2 在机智云app能够观察机智云平台模拟的数据
根据系统的需要添加或修改数据点信息
四、下载mcu代码包
4.1 在确定数据点无误后,点击mcu开发
4.2 生成代码包后,把代码包导入arduino ide开发环境的libraries文件中,libraries是arduino的库文件,包含自带的库文件和用户添加的外部库文件
把networkconfig.ino的配网代码移植到simpletry.ino,把串口打印的代码注释起来,可参考资料分享:史上最详细的arduino uno r3接入机智云教程
https://club.gizwits.com/thread-6728-1-1.html
然后根据要求修改代码,以下仅供参考:
                                                                                                                                                                                                                                                                                             #include #include #include #include int con_ledpin = 13;    //成功连接网络,13引脚低电平int smokepin = 2;int movepin = 3;int alarmpin = 4;int ledpin = 5;int relaypin1 = 8;int relaypin2 = 9;int firepin = a0;int lightpin = a1;int beeppin = 10;int temhumpin = 11;bool alarmflag = 0;dht mydht_11;softwareserial myserial(a2, a3); // a2 -> rx, a3 -> txgizwits mygizwits;#define   key1              6#define   key2              7#define   key1_short_press  1#define   key1_long_press   2#define   key2_short_press  4#define   key2_long_press   8#define   no_key            0#define   key_long_timer    3#define   alarm_short_press 16#define   alarm_long_press  32unsigned long last_keytime = 0;unsigned long gokit_time_s(void){  return millis() / 1000;}char gokit_key1down(void){  unsigned long keep_time = 0;  if (digitalread(key1) == low)  {    delay(100);    if (digitalread(key1) == low)    {      keep_time = gokit_time_s();      while (digitalread(key1) == low)      {        if ((gokit_time_s() - keep_time) > key_long_timer)        {          last_keytime = gokit_time_s();          return key1_long_press;        }      } //until open the key      if ((gokit_time_s() - last_keytime) > key_long_timer)      {        return key1_short_press;      }      return 0;    }    return 0;  }  return 0;}char gokit_key2down(void){  unsigned long keep_time = 0;  if (digitalread(key2) == low)  {    delay(100);    if (digitalread(key2) == low)    {    delay(100);    if (digitalread(key2) == low)    {      keep_time = gokit_time_s();      while (digitalread(key2) == low) //until open the key      {        if ((gokit_time_s() - keep_time) > key_long_timer)        {          last_keytime = gokit_time_s();          return key2_long_press;        }      }      if ((gokit_time_s() - last_keytime) > key_long_timer)      {        return key2_short_press;      }      return 0;    }    return 0;  }  return 0;}//室内报警监测char gokit_alarmdown(void){  unsigned long keep_time = 0;  if (digitalread(alarmpin) == low)  {    delay(100);    if (digitalread(alarmpin) == low)    {      keep_time = gokit_time_s();      while (digitalread(alarmpin) == low) //until open the key      {        if ((gokit_time_s() - keep_time) > key_long_timer)        {          last_keytime = gokit_time_s();          return alarm_long_press;        }      }      if ((gokit_time_s() - last_keytime) > key_long_timer)      {        return alarm_short_press;      }      return 0;    }    return 0;  }  return 0;}char gokit_keydown(void){  char ret = 0;  ret |= gokit_alarmdown();  ret |= gokit_key2down();  ret |= gokit_key1down();  return ret;}void key_handle(void){  /*  press for over than 3 second is long press  */  switch (gokit_keydown())  {    case key1_short_press:      mygizwits.setbindmode(wifi_production_test);      break;    case key1_long_press:      mygizwits.setbindmode(wifi_reset_mode);      break;    case key2_short_press:      mygizwits.setbindmode(wifi_softap_mode);      //soft ap mode      break;    case key2_long_press:      mygizwits.setbindmode(wifi_airlink_mode);      //airlink mode      break;    case alarm_short_press:      alarmflag = ((alarmflag == 0) ? 1 : 0);      if (alarmflag)      {        digitalwrite(beeppin, low);      }      else      {        digitalwrite(beeppin, high);      }      break;    case alarm_long_press:      digitalwrite(ledpin, high); //设置为高电平      digitalwrite(relaypin1, high); //设置为高电平      digitalwrite(relaypin2, high); //设置为高电平      break;    default:      break;  }}//获取温度数据int dht_11_gettemperature() {  int chk = mydht_11.read11(temhumpin);  int value = mydht_11.temperature;  return value;}//获取湿度数据int dht_11_gethumidity() {  int chk = mydht_11.read11(temhumpin);  int value = mydht_11.humidity;  return value;}/**  serial init , gizwits init  @param none  @return none*/void setup() {  // put your setup code here, to run once:  myserial.begin(115200);  pinmode(key1, input_pullup);  pinmode(key2, input_pullup);  pinmode(smokepin, input);  //设置为数字输入模式  pinmode(movepin, input);  pinmode(alarmpin, input_pullup);  pinmode(firepin, input);  pinmode(lightpin, input); //模拟量为输入模式  pinmode(beeppin, output); //设置为数字输出模式  pinmode(ledpin, output);  pinmode(relaypin1, output);  pinmode(relaypin2, output);  pinmode(con_ledpin, output);  digitalwrite(beeppin, high); //设置为高电平  mygizwits.begin();}void wifistatushandle(){  if (mygizwits.wifihasbeenset(wifi_con_router))  {    digitalwrite(con_ledpin, high); //设置为低电平    digitalwrite(ledpin, high); //设置为高电平    digitalwrite(relaypin1, high); //设置为高电平    digitalwrite(relaypin2, high); //设置为高电平  }}/**  arduino loop  @param none  @return none*/void loop() {  //configure network  //if(xxx) //trigger condition  //mygizwits.setbindmode(0x02);  //0x01:enter ap mode;0x02:enter airlink mode  bool varw_alarm = alarmflag;//add sensor data collection  mygizwits.write(value_alarm, varw_alarm);  unsigned long varw_fire = analogread(firepin);//add sensor data collection  mygizwits.write(value_fire, varw_fire);  unsigned long varw_move_test = digitalread(movepin);//add sensor data collection  mygizwits.write(value_move_test, varw_move_test);  unsigned long varw_tem = dht_11_gettemperature();//add sensor data collection  mygizwits.write(value_tem, varw_tem);  unsigned long varw_hum = dht_11_gethumidity();//add sensor data collection  mygizwits.write(value_hum, varw_hum);  unsigned long varw_light = analogread(lightpin);//add sensor data collection  mygizwits.write(value_light, varw_light);  bool varr_led_onoff = 0;  if (mygizwits.hasbeenset(event_led_onoff))  {    mygizwits.read(event_led_onoff, &varr_led_onoff); //address for storing data    if (varr_led_onoff == 0)    {      digitalwrite(ledpin, high);    }    else    {      digitalwrite(ledpin, low);    }  }  bool varr_relay_1 = 0;  if (mygizwits.hasbeenset(event_relay_1))  {    mygizwits.read(event_relay_1, &varr_relay_1); //address for storing data    if (varr_relay_1 == 0)    {      digitalwrite(relaypin1, high);    }    else    {      digitalwrite(relaypin1, low);    }  }  bool varr_relay_2 = 0;  if (mygizwits.hasbeenset(event_relay_2))  {    mygizwits.read(event_relay_2, &varr_relay_2); //address for storing data    if (varr_relay_2 == 0)    {      digitalwrite(relaypin2, high);    }    else    {      digitalwrite(relaypin2, low);    }  }  bool varr_beep = 0;  if (mygizwits.hasbeenset(event_beep))  {    mygizwits.read(event_beep, &varr_beep); //address for storing data    if (varr_beep == 0 )    {      digitalwrite(beeppin, high);    }    else    {      digitalwrite(beeppin, low);    }  }  key_handle();  wifistatushandle();  mygizwits.process();}五、下载android开发代码包
5.1  在应用开发生成app代码包
通过android studio软件导入项目进行编译,因版本问题需要修改关键词,compile 均替换为implementation,testcompile均替换为testimplementation,可参考以下代码:
                                            apply plugin: 'com.android.application'android {    compilesdkversion 25    buildtoolsversion '28.0.2'    uselibrary 'org.apache.http.legacy'    defaultconfig {        applicationid com.gizwits.opensource.appkit        minsdkversion 16        targetsdkversion 25        versioncode 1        versionname 2.5.1.072715        multidexenabled true    }    buildtypes {        release {            minifyenabled false            proguardfiles getdefaultproguardfile('proguard-android.txt'), 'proguard-rules.pro'        }    }}dependencies {    implementation filetree(dir: 'libs', include: ['*.jar'])    implementation 'com.android.support.constraint1.1.0'    testimplementation 'junit4.12'    implementation 'com.android.support24.2.1'    implementation files('libs/bleasyconfig.jar')    implementation files('libs/easylink2.0.jar')    implementation files('libs/gizwifisdk.jar')    implementation files('libs/jpush-android-2.1.5.jar')    implementation files('libs/lark7618sdk_noudp1606031910_0101.jar')    implementation files('libs/libammsdk.jar')    implementation files('libs/libforeelink.jar')    implementation files('libs/lsfsk_1.0.jar')    implementation files('libs/ltlink2.jar')    implementation files('libs/mta-sdk-1.6.2.jar')    implementation files('libs/oneshotconfig.jar')    implementation files('libs/open_sdk_r5756.jar')    implementation files('libs/pushservice-5.6.0.30.jar')    implementation files('libs/simpleconfigwizardlib.jar')    implementation files('libs/xutils-2.6.14.jar')    implementation files('libs/zxing.jar')    implementation 'com.android.support25.3.0'    implementation 'com.yanzhenjie1.0.5'} 
同时可参考基于机智云aiot平台的android开源app修改教程
https://www.sohu.com/a/476083681_486728
使项目成功编译
原文转自:https://blog.csdn.net/a6662580/article/details/122558080

机器人技术重心应从军用转到民用
采甩EPlKl000C208-3芯片实现温度检测无线发射接收系统设计
最新的机器人将怎样用于工业与军事
定位精准至“厘米级” 高精度“赋能”全社会
电动机选型注意事项
基于Arduino与机智云的家居环境远程系统设计(云平台部署)
AI算法进步神速对人工智能意味着什么
海康威视获得发明专利授权:“一种人体应激性信息识别方法、装置及电子设备
中国电信将持续强化IPTV平台赋能,打造有温度的“智慧乡村”!
马云:未来30年 数据将取代石油,成最强大能源
虹科激光测距传感器提供和控制系统进行通信方法
CMCIC2017中国测控技术与仪器大会-主题展
使用人工智能的智能手机应用程序来帮助糖尿病患者
RS232转PROFINET网关PNRS232-K20配置步骤
Beat Saber面市 被赞“追踪功能非常棒”
赛灵思和华为联合宣布华为 FPGA 加速云服务器平台登陆北美市场
苹果Apple News+陷入无法访问状态
富士通Tegra3首款四核智能机泄露
风河云平台催生新一代物联网支持系统
深度学习在机器视觉中的应用与发展