初出茅庐的小李第115篇博客之智能浇花器实战分享(4)
机智云智能浇花器实战分享(下)
机智云平台如何创建数据点:
机智云官方网站:机智云|物联网云平台,AIoT开发云平台,Aiot软件开发平台、AIoT开发云平台、工业物联网解决方案 (gizwits.com)
开发者账号登录:
进入开发者中心:
开发向导:
产品接入的两个关键信息:
Product Key:
e68aae38bc444cb8bc8c7f3003201a80
Product Secret:
d70f3a13ca284392aa4060aadc3f35f3
每一个产品都是唯一的。
机智云平台代码如何自动生成:
某些信息上报到云平台:
信息就是数据,温度,湿度,光照,继电器开关。
这些信息就是数据点。
数据点:温度 湿度 光照强度。 传感器上报云平台信息,这些信息不允许被平台上任意更改。
只读信息。创建数据点的时候就要选择只读。
继电器开关:项目板上的继电器状态既要上报到云平台,又要能被平台下发的数据影响。影响要靠MCU处理。
可读可写。创建的数据点能够下发信息到项目板,也能从项目板上赋值。开或者关
数据点如何快速下发到我们项目板。
项目板上的数据如何发送给平台。
机智云平台如何快速接入:
通用平台:
官方生成一个代码包,基础的实现,适配一个串口用于和模组(WiFi)进行通信。STM32F103C8T6的芯片,串口3,适配一个1ms的定时器,本地数据发送给平台靠的是串口,
还有时间心跳这个需要一定ms级别的定时,内存也有一定要求。
生成代码:
下载代码:
代码移植:
代码修改:
平台下发命令的处理修改
本地上报的数据点修改
给数据点赋值:
赋值操作,修改逻辑 怎么就能在本地执行
定时器代码实现
定时
串口代码的实现
数据修改:
i
nt32_t gizwitsHandle(dataPoint_t *currentData)
{int8_t ret = 0;
#ifdef PROTOCOL_DEBUGuint16_t i = 0;
#endifuint8_t ackData[RB_MAX_LEN];uint16_t protocolLen = 0;uint32_t ackLen = 0;protocolHead_t *recvHead = NULL;char *didPtr = NULL;uint16_t offset = 0;if(NULL == currentData){GIZWITS_LOG("GizwitsHandle Error , Illegal Param\n");return -1;}/*resend strategy*/gizProtocolAckHandle();ret = gizProtocolGetOnePacket(&pRb, gizwitsProtocol.protocolBuf, &protocolLen);if(0 == ret){GIZWITS_LOG("Get One Packet!\n");#ifdef PROTOCOL_DEBUGGIZWITS_LOG("WiFi2MCU[%4d:%4d]: ", gizGetTimerCount(), protocolLen);for(i=0; i<protocolLen;i++){GIZWITS_LOG("%02x ", gizwitsProtocol.protocolBuf[i]);}GIZWITS_LOG("\n");
#endifrecvHead = (protocolHead_t *)gizwitsProtocol.protocolBuf;switch (recvHead->cmd){case CMD_GET_DEVICE_INTO:gizProtocolGetDeviceInfo(recvHead);break;case CMD_ISSUED_P0:GIZWITS_LOG("flag %x %x \n", recvHead->flags[0], recvHead->flags[1]);//offset = 1;if(0 == gizProtocolIssuedProcess(didPtr, gizwitsProtocol.protocolBuf+sizeof(protocolHead_t)+offset, protocolLen-(sizeof(protocolHead_t)+offset+1), ackData, &ackLen)){gizProtocolIssuedDataAck(recvHead, ackData, ackLen,recvHead->flags[1]);GIZWITS_LOG("AckData : \n");}break;case CMD_HEARTBEAT:gizProtocolCommonAck(recvHead);break;case CMD_WIFISTATUS:gizProtocolCommonAck(recvHead);gizProtocolModuleStatus((protocolWifiStatus_t *)recvHead);break;case ACK_REPORT_P0:case ACK_WIFI_CONFIG:case ACK_SET_DEFAULT:case ACK_NINABLE_MODE:case ACK_REBOOT_MODULE:gizProtocolWaitAckCheck(recvHead);break;case CMD_MCU_REBOOT:gizProtocolCommonAck(recvHead);GIZWITS_LOG("report:MCU reboot!\n");gizProtocolReboot();break;case CMD_ERROR_PACKAGE:break;case ACK_PRODUCTION_TEST:gizProtocolWaitAckCheck(recvHead);GIZWITS_LOG("Ack PRODUCTION_MODE success \n");break; case ACK_GET_NTP:gizProtocolWaitAckCheck(recvHead);gizProtocolNTP(recvHead);GIZWITS_LOG("Ack GET_UTT success \n");break; case ACK_ASK_MODULE_INFO:gizProtocolWaitAckCheck(recvHead);gizProtocolModuleInfoHandle(recvHead);GIZWITS_LOG("Ack GET_Module success \n");break;default:gizProtocolErrorCmd(recvHead,ERROR_CMD);GIZWITS_LOG("ERR: cmd code error!\n");break;}}else if(-2 == ret){//Check failed, report exceptionrecvHead = (protocolHead_t *)gizwitsProtocol.protocolBuf;gizProtocolErrorCmd(recvHead,ERROR_ACK_SUM);GIZWITS_LOG("ERR: check sum error!\n");return -2;}switch(gizwitsProtocol.issuedFlag){case ACTION_CONTROL_TYPE:gizwitsProtocol.issuedFlag = STATELESS_TYPE;gizwitsEventProcess(&gizwitsProtocol.issuedProcessEvent, (uint8_t *)&gizwitsProtocol.gizCurrentDataPoint, sizeof(dataPoint_t));memset((uint8_t *)&gizwitsProtocol.issuedProcessEvent,0x0,sizeof(gizwitsProtocol.issuedProcessEvent)); break;case WIFI_STATUS_TYPE:gizwitsProtocol.issuedFlag = STATELESS_TYPE;gizwitsEventProcess(&gizwitsProtocol.wifiStatusEvent, (uint8_t *)&gizwitsProtocol.wifiStatusData, sizeof(moduleStatusInfo_t));memset((uint8_t *)&gizwitsProtocol.wifiStatusEvent,0x0,sizeof(gizwitsProtocol.wifiStatusEvent));break;case ACTION_W2D_TRANSPARENT_TYPE:gizwitsProtocol.issuedFlag = STATELESS_TYPE;gizwitsEventProcess(&gizwitsProtocol.issuedProcessEvent, (uint8_t *)gizwitsProtocol.transparentBuff, gizwitsProtocol.transparentLen);break;case GET_NTP_TYPE:gizwitsProtocol.issuedFlag = STATELESS_TYPE;gizwitsEventProcess(&gizwitsProtocol.NTPEvent, (uint8_t *)&gizwitsProtocol.TimeNTP, sizeof(protocolTime_t));memset((uint8_t *)&gizwitsProtocol.NTPEvent,0x0,sizeof(gizwitsProtocol.NTPEvent));break;case GET_MODULEINFO_TYPE:gizwitsProtocol.issuedFlag = STATELESS_TYPE;gizwitsEventProcess(&gizwitsProtocol.moduleInfoEvent, (uint8_t *)&gizwitsProtocol.wifiModuleNews, sizeof(moduleInfo_t));memset((uint8_t *)&gizwitsProtocol.moduleInfoEvent,0x0,sizeof(moduleInfo_t));break;default:break; }gizDevReportPolicy(currentData);return 0;
}
串口的修改:
初出茅庐的小李第115篇博客之智能浇花器实战分享(4)相关推荐
- 初出茅庐的小李第3篇博客《5G物联网及NB-IoT技术详解》读书笔记1
初出茅庐的小李第3篇博客 <5G物联网及NB-IoT技术详解>读书笔记1 在Mculover666那里白嫖了一本书,不要问我咋白嫖的,我也不知道- 为什么要写这样的笔记? 因为我白嫖的时候 ...
- 初出茅庐的小李第113篇博客项目笔记之机智云智能浇花器实战(2)-基础Demo实现
初出茅庐的小李第112篇博客项目笔记之机智云智能浇花器实战(1)-基础Demo实现 接(1) 继电器实现 继电器原理图 继电器采用的是5V继电器,控制端是RELAY-1 继电器代码实现 #includ ...
- 初出茅庐的小李第39篇博客之转载一篇有关unistd.h的介绍文章
转载一篇文章 mask一下好找 unistd.h在unix中类似于window中的windows.h! #ifdef WIN32 #include <windows.h> #else #i ...
- 初出茅庐的小李第19篇博客之广和通G510模块接入机智云平台
2020年5月1日劳动节 为什么要说一下这个日期,因为我上一次玩(学)G510模组是去年2019年5月1日,由于种种原因吧,一直也没有机会再次操作,而且不幸的一件事情就是,我还把上次搞的代码搞丢了,也 ...
- 初出茅庐的小李第73篇博客之offsetof(type, member-designator)使用
offsetof(type, member-designator) 这是一个宏定义包含在<stddef.h>里,它的作用是用来计算一个结构成员相对于结构开头的字节偏移量. 说到这里我先来补 ...
- 初出茅庐的小李第86篇博客之Modbus协议总结
Modbus协议来源 Modbus协议的由来 Mod,取自英文单词" Modicon",Modicon 中文翻译为莫迪康,是美国一家自动化公司的名字,现在这家公司被法国的施耐德电气 ...
- 初出茅庐的小李第59篇博客之测试Modbus协议的继电器
1, Modbus RTU指令详解 发送: FF 05 00 00 FF 00 99 E4 字段 含义 注释 FF 设备地址 范围1-255,默认255 05 功能码 写单个线圈 00 00 继电器地 ...
- 初出茅庐的小李第114篇博客项目笔记之机智云智能浇花器实战(3)-基础Demo实现
机智云智能浇花器实战(3)-基础Demo实现 链接:机智云智能浇花器实战(2)-基础Demo实现 BH1750光照传感器原理图 BH1750传感器代码 #include "bh1750.h& ...
- 初出茅庐的小李第36篇博客之读取旋转编码器正反转状态(arduino uno 测试)
旋转编码器的引脚 CLK(A相) DATA(B相) SWITCH VCC GND 工作原理 旋转编码器的工作原理以及如何在Arduino中使用 https://www.yiboard.com/thre ...
最新文章
- Facebook、谷歌、微软利用“黑暗模式”诱骗用户交出数据
- MIR6校验时移动平均价为负的原因及解决
- python之知乎的正确打开方式
- OpenCV使用F变换进行修补
- C++与QML逻辑分离
- eclipse执行单元测试报CreateProcess error=87的解决方法
- 小米 pegasus_使用Google的Pegasus库生成摘要
- Android 21mod,熊猫博士小镇合集 Mod
- Hadoop学习总结:Map-Reduce入门
- java隔几秒发数据_java – 如何将数据推送到jsp而不是每2秒请求一次?
- GWO(灰狼优化)算法
- sqlmap-学习1 配置环境
- 12位黄金技术大佬发出警告:一大波必读好书向你袭来
- 数据结构算法题整理2
- win10商店下载位置_手把手教您win10应用商店安装目录在哪的详尽处理门径
- 关于打印机共享和连接问题
- cordova media插件
- Linpack 安装和使用步骤
- 牛客 NC24858 [USACO 2009 Nov S]Job Hunt
- 开箱即用!使用Rancher 2.3 启用Istio初体验
热门文章
- Anti Porn(家长控制软件)v25.2.4.8官方版
- 【理论恒叨】【立体匹配系列】经典SGM:(3)代价聚合(Cost Aggregation)
- Python 爬虫 (二)
- CVPR2019----论文汲取
- 计算机应用基础知识办公软件使用,计算机应用基础教程-Windows 7+Office 2010.pdf
- wps数据库三线表怎么做_如何在wps文档制作三线表?wps文档制作三线表的方法
- JS javascript 点击鼠标 鼠标事件 获取元素 获取元素Xpath
- Unity Dotween曲线介绍 Ease曲线 Ease图表 Ease效果示例
- 斯坦福大学-李菲菲,深度学习1到9讲听课笔记
- ES+HBase【案例】仿百度搜索04:开发仿百度搜索项目