0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

机智云 2022-04-13 16:21 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前言:本文主要介绍如何在机智云平台创建一个智能产品、定义功能数据点、生成MCU代码包并附上修改好的代码、生成APP代码编译附上参考代码。

需准备的硬件主要有Arduino uno R3、ESP8266

连线方式:A0读取模拟电压输入;Key1接到D6;Key2接到D7;LED接到D4;

66c83fa4-b9b8-11ec-82f6-dac502259ad0.png

一、创建项目

1.1 创建新产品

登陆机智云AIoT开发平台 dev.gizwits.com 创建智能产品

66e09ba8-b9b8-11ec-82f6-dac502259ad0.png

1.2 进入项目可查看信息

什么是Product Key、Product Secret

Product Key又称产品标识码,开发者通过机智云后台创建新产品后,自动生成的一个32位字符串。在机智云的数据库中是一个唯一的号码,开发者将ProductKey写入设备主控MCU后,机智云通过此标识码对设备进行识别并自动完成注册。

设备接入机智云的前提是,需要机智云认同这个设备。Productkey是设备接入机智云的一个重要参数,该参数的基本含义是:一款设备识别码。例如某公司生产空调、热水器,空调和热水器是不同款设备,该公司设备接入机智云,至少需要两个Productkey参数。在开发MCU过程中,需要使用到该参数。

http://docs.gizwits.com/zh-cn/quickstart/noun.html

670d7614-b9b8-11ec-82f6-dac502259ad0.png

二、添加数据点

根据系统的需求添加数据点,可参考本系统数据点

什么是数据点?

数据点即设备产品的功能的抽象,用于描述产品功能及其参数。创建数据点后,设备与云端通讯的数据格式即可确定,设备、机智云可以相互识别设备与机智云互联互通的数据。

参考:http://docs.gizwits.com/zh-cn/quickstart/UseMCU.html

671b818c-b9b8-11ec-82f6-dac502259ad0.png

三、进行虚拟设备调试

3.1 创建好数据点后,进行虚拟设备调试

什么是虚拟设备?类似一款仿真器,能够模拟硬件设备。

虚拟设备是机智云云端可自动生成的一个仿真智能硬件,可模拟要开发或正在开发的智能硬件,来进行云端设备控制、手机APP控制、上报数据等需求。

开发者或企业研发人员在机智云平台开发时,如果正式的智能硬件产品产品还未完全开发完成,就可以很方便地使用该“虚拟设备”与正式产品的控制APP进行调试和验证,加快研发周期,降低研发成本。

https://baijiahao.baidu.com/s?id=1725343397578131479&wfr=spider&for=pc

67351fe8-b9b8-11ec-82f6-dac502259ad0.png

3.2 在机智云APP能够观察机智云平台模拟的数据

674cbb80-b9b8-11ec-82f6-dac502259ad0.png

根据系统的需要添加或修改数据点信息

四、下载MCU代码包

4.1 在确定数据点无误后,点击MCU开发

6760e07e-b9b8-11ec-82f6-dac502259ad0.png

4.2 生成代码包后,把代码包导入Arduino IDE开发环境的libraries文件中,libraries是Arduino的库文件,包含自带的库文件和用户添加的外部库文件

6773ad26-b9b8-11ec-82f6-dac502259ad0.png

把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 32
unsigned 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代码包

678aa54e-b9b8-11ec-82f6-dac502259ad0.png

通过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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 机智云
    +关注

    关注

    3

    文章

    629

    浏览量

    27631
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何快速在服务器上部署Web环境

    如何快速在服务器上部署Web环境
    的头像 发表于 10-14 14:16 309次阅读

    基于机智平台的新疆农田气候检测系统设计与实现

    本文设计了一种基于平台的新疆农田气候检测系统,用于实时监测风速、温湿度和PM2.5等环境参数,提升农业生产智能化水平。系统采用STM32单
    的头像 发表于 09-23 18:45 489次阅读
    基于<b class='flag-5'>机智</b><b class='flag-5'>云</b><b class='flag-5'>平台</b>的新疆农田气候检测<b class='flag-5'>系统</b>设计与实现

    汉威科技空气质量传感器助力家居环境安全监测

    家居环境是人类的“第一空间”,是人们安身立命、享受生活的地方,然而现代社会的家居环境往往暗藏危险,尤其是甲醛这种看不见摸不着的有害物质。
    的头像 发表于 08-22 17:51 1022次阅读

    STM32项目分享:智能家居(机智)升级版

    01—项目简介1.功能详解STM32智能家居(机智)升级版功能如下:检测功能:监测环境温湿度、烟雾浓度、一氧化碳、空气质量、光照强
    的头像 发表于 07-02 18:04 618次阅读
    STM32项目分享:智能<b class='flag-5'>家居</b>(<b class='flag-5'>机智</b><b class='flag-5'>云</b>)升级版

    物联网智能家居方案-基于Nucleo-STM32L073&amp;机智实例项目打包下载

    物联网智能家居方案-基于Nucleo-STM32L073&机智实例项目打包,推荐下载!
    发表于 05-29 21:50

    物联网智能家居方案-基于Nucleo-STM32L073&amp;机智 项目实例

    物联网智能家居方案-基于Nucleo-STM32L073&机智 项目实例下载! 纯分享帖,需要者可点击附件免费获取完整资料~~~【免责声明】本文系网络转载,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问
    发表于 05-23 21:01

    STM32与机智连接实现步骤与技巧(下篇):机智代码移植与优化

    在《STM32与机智连接实现步骤与技巧(上篇)》中,我们介绍了硬件连接和通信协议配置。本篇将重点讲解如何将机智相关代码移植到STM32,完成数据上传和设备控制。我们将介绍如何在ST
    的头像 发表于 05-23 18:10 800次阅读
    STM32与<b class='flag-5'>机智</b><b class='flag-5'>云</b>连接实现步骤与技巧(下篇):<b class='flag-5'>机智</b><b class='flag-5'>云</b>代码移植与优化

    STM32与机智连接实现步骤与技巧(上篇)

    通过STM32与机智的连接,开发者可以实现设备的远程控制和数据管理,提升物联网应用的智能化水平。本文将介绍STM32与机智连接的具体步骤
    的头像 发表于 05-23 18:10 850次阅读
    STM32与<b class='flag-5'>机智</b><b class='flag-5'>云</b>连接实现步骤与技巧(上篇)

    HarmonyOS5服务技术分享--函数预加载文章整理

    ​​嗨,亲爱的开发者朋友们!​​? 今天咱们来聊聊如何使用​​端一体化方式开发函数​​,尤其针对华为的预加载服务。整个过程会手把手带你从零开始,涵盖创建工程、编写代码、调试到部署,帮你轻松掌握
    发表于 05-22 20:33

    HarmonyOS5服务技术分享--Serverless抽奖模板部署

    活动。不用写复杂代码,跟着步骤走就能搞定,文末还有部署避坑指南哦~ 一、前期准备 1️⃣ ​​注册账号+创建项目​​ 先到华为开发者平台注册账号 创建新项目时记得勾选\"开发
    发表于 05-22 20:25

    HarmonyOS5服务技术分享--ArkTS开发Node环境

    服务。例如: 用户身份验证 数据实时处理(如订单状态更新) 第三方服务集成(如支付回调) ?️ 二、手把手开发流程:从配置到部署 1️⃣ ​​环境准备​​ ​​工具链​​:安装DevEco
    发表于 05-22 17:21

    DeepSeek企业级部署RakSmart裸机环境准备指南

    RakSmart裸机环境部署DeepSeek的企业级环境准备指南,内容涵盖关键步骤和注意事项,主机推荐小编为您整理发布DeepSeek企业级RakSmart裸机
    的头像 发表于 03-24 10:07 755次阅读

    基于STM32与机智的楼宇火灾监测系统设计

    摘要针对火灾对楼宇健康和居民安全的威胁,设计并开发了一款楼宇火灾实时监测系统。该系统以STM32为主控芯片,机智远程终端,通过LED显示
    的头像 发表于 01-18 10:02 1763次阅读
    基于STM32与<b class='flag-5'>机智</b><b class='flag-5'>云</b>的楼宇火灾监测<b class='flag-5'>系统</b>设计

    华为 Flexus 服务器 X 实例之 openEuler 系统部署 Tailchat 开源聊天系统

    前言 在华为 Flexus 服务器 X 实例的支持下,本次实践将展示如何在先进的 openEuler 系统环境部署 TailChat
    的头像 发表于 01-08 11:40 663次阅读
    华为<b class='flag-5'>云</b> Flexus <b class='flag-5'>云</b>服务器 X 实例之 openEuler <b class='flag-5'>系统</b>下<b class='flag-5'>部署</b> Tailchat 开源聊天<b class='flag-5'>系统</b>

    STM32项目分享:机智智慧农业系统

    01—项目简介1.功能详解基于STM32的机智智慧农业系统。功能如下:温湿度采集:使用DHT11温湿度传感器采集环境温湿度土壤湿度
    的头像 发表于 12-19 18:40 1901次阅读
    STM32项目分享:<b class='flag-5'>机智</b><b class='flag-5'>云</b>智慧农业<b class='flag-5'>系统</b>