前言:本文主要介绍如何在机智云平台创建一个智能产品、定义功能数据点、生成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首款四核智能机泄露
风河云平台催生新一代物联网支持系统
深度学习在机器视觉中的应用与发展