机智云智能浇花器实战分享(下)

机智云平台如何创建数据点:

机智云官方网站:机智云|物联网云平台,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)相关推荐

  1. 初出茅庐的小李第3篇博客《5G物联网及NB-IoT技术详解》读书笔记1

    初出茅庐的小李第3篇博客 <5G物联网及NB-IoT技术详解>读书笔记1 在Mculover666那里白嫖了一本书,不要问我咋白嫖的,我也不知道- 为什么要写这样的笔记? 因为我白嫖的时候 ...

  2. 初出茅庐的小李第113篇博客项目笔记之机智云智能浇花器实战(2)-基础Demo实现

    初出茅庐的小李第112篇博客项目笔记之机智云智能浇花器实战(1)-基础Demo实现 接(1) 继电器实现 继电器原理图 继电器采用的是5V继电器,控制端是RELAY-1 继电器代码实现 #includ ...

  3. 初出茅庐的小李第39篇博客之转载一篇有关unistd.h的介绍文章

    转载一篇文章 mask一下好找 unistd.h在unix中类似于window中的windows.h! #ifdef WIN32 #include <windows.h> #else #i ...

  4. 初出茅庐的小李第19篇博客之广和通G510模块接入机智云平台

    2020年5月1日劳动节 为什么要说一下这个日期,因为我上一次玩(学)G510模组是去年2019年5月1日,由于种种原因吧,一直也没有机会再次操作,而且不幸的一件事情就是,我还把上次搞的代码搞丢了,也 ...

  5. 初出茅庐的小李第73篇博客之offsetof(type, member-designator)使用

    offsetof(type, member-designator) 这是一个宏定义包含在<stddef.h>里,它的作用是用来计算一个结构成员相对于结构开头的字节偏移量. 说到这里我先来补 ...

  6. 初出茅庐的小李第86篇博客之Modbus协议总结

    Modbus协议来源 Modbus协议的由来 Mod,取自英文单词" Modicon",Modicon 中文翻译为莫迪康,是美国一家自动化公司的名字,现在这家公司被法国的施耐德电气 ...

  7. 初出茅庐的小李第59篇博客之测试Modbus协议的继电器

    1, Modbus RTU指令详解 发送: FF 05 00 00 FF 00 99 E4 字段 含义 注释 FF 设备地址 范围1-255,默认255 05 功能码 写单个线圈 00 00 继电器地 ...

  8. 初出茅庐的小李第114篇博客项目笔记之机智云智能浇花器实战(3)-基础Demo实现

    机智云智能浇花器实战(3)-基础Demo实现 链接:机智云智能浇花器实战(2)-基础Demo实现 BH1750光照传感器原理图 BH1750传感器代码 #include "bh1750.h& ...

  9. 初出茅庐的小李第36篇博客之读取旋转编码器正反转状态(arduino uno 测试)

    旋转编码器的引脚 CLK(A相) DATA(B相) SWITCH VCC GND 工作原理 旋转编码器的工作原理以及如何在Arduino中使用 https://www.yiboard.com/thre ...

最新文章

  1. Facebook、谷歌、微软利用“黑暗模式”诱骗用户交出数据
  2. MIR6校验时移动平均价为负的原因及解决
  3. python之知乎的正确打开方式
  4. OpenCV使用F变换进行修补
  5. C++与QML逻辑分离
  6. eclipse执行单元测试报CreateProcess error=87的解决方法
  7. 小米 pegasus_使用Google的Pegasus库生成摘要
  8. Android 21mod,熊猫博士小镇合集 Mod
  9. Hadoop学习总结:Map-Reduce入门
  10. java隔几秒发数据_java – 如何将数据推送到jsp而不是每2秒请求一次?
  11. GWO(灰狼优化)算法
  12. sqlmap-学习1 配置环境
  13. 12位黄金技术大佬发出警告:一大波必读好书向你袭来
  14. 数据结构算法题整理2
  15. win10商店下载位置_手把手教您win10应用商店安装目录在哪的详尽处理门径
  16. 关于打印机共享和连接问题
  17. cordova media插件
  18. Linpack 安装和使用步骤
  19. 牛客 NC24858 [USACO 2009 Nov S]Job Hunt
  20. 开箱即用!使用Rancher 2.3 启用Istio初体验

热门文章

  1. Anti Porn(家长控制软件)v25.2.4.8官方版
  2. 【理论恒叨】【立体匹配系列】经典SGM:(3)代价聚合(Cost Aggregation)
  3. Python 爬虫 (二)
  4. CVPR2019----论文汲取
  5. 计算机应用基础知识办公软件使用,计算机应用基础教程-Windows 7+Office 2010.pdf
  6. wps数据库三线表怎么做_如何在wps文档制作三线表?wps文档制作三线表的方法
  7. JS javascript 点击鼠标 鼠标事件 获取元素 获取元素Xpath
  8. Unity Dotween曲线介绍 Ease曲线 Ease图表 Ease效果示例
  9. 斯坦福大学-李菲菲,深度学习1到9讲听课笔记
  10. ES+HBase【案例】仿百度搜索04:开发仿百度搜索项目