IoT小能手:一个高中生与机智云自助开发平台美好的遇见!
楼主是一名来自云南省的高一年级学生,大约在两年前接触到的物联网开发。那时我刚刚接触8051单片机一年,一丛偶然从群里听到物联网的各种神奇功能以及所带来的未来生活我立马就被深深吸引了。正如乔布斯所说/;“人活着就是为了改变世界”(楼主的个人信仰)。那时物联网在我看来确实是一个改变世界的最好途径。当晚,我便打开了百度疯狂寻找有关物联网技术的资料以及已经成熟的产品。通过慢慢的深入,发现物联网还需要搭建一个服务器,来负责用户端与设备端之间的消息转发,当时我立马傻眼了(那时的楼主还只是一个刚刚把8051单片机玩得差不多的菜鸟,至于后来的工作室网站,那是后话了),对于当时的我是非常困难的。后来经过几天的摸索,接触到了物联网云平台可以提供自己暂时无法做的云服务,那时候感觉又看到了希望。立马就去百度了下,结果提供物联网云平台服务的服务商真的很多,那是的楼主首先打算接入的是移动的onenet,结果点开服务一看,啥HTTP ,MQTT...,楼主当时可真的不知道那些该怎么搞,怎么和自己手上的单片机对接,用什么对接,那时的都没说那时的楼主真的想放弃了,心想:“这物联网还让不让人玩的,连找个云服务商对接门槛都那么高。”我相信这是很多小白刚刚接触物联网时候的心里话。不过事情就在这个是个时候发生了转折,通过一个朋友的介绍,认识了机智云,那时候的机智云还没有现在自动生成代码等等更加贴心的功能,当时,比较开心的添加了一个数据点进去,然后买了个ESP8266就开始开发了。那时根据自动生成的协议文档编写对应的通信协议,经过一个星期的努力,在最后完成了与机智云的对接。当敲击APP对应的按键,身边的设备就出现了对应的变化,那时对于一个初中生来说真的感觉自己掌握了世界。后来自己就在一直关注机智云的各方面动态,看着机智云出现了更加降低开发者接入门槛的服务,内心其实是比较开心的。 上面就是楼主与物联网的奋斗史:lol下面重点结合此次借助机智云参加全国中小学生创造大赛的作品来介绍机智云的云服务,以及自己对机智云各项云服务的理解。 不多说先上本次参赛的作品:经过考虑后,感觉还是通过以上作品开发前后3个月的过程与大家慢慢介绍自己的一些小理解。
不多说,先上主函数代码:如下
机智云提供的API已用红框标出
下面为大家解释下各个接口的作用:
1.gizwitsInit();函数主要机智云协议初始化以及一些硬件的初始化(与wifi模块的通信串口,定时器,看门狗)
2. userHandle(); 函数主要是一个对数据结构体成员的修改(作用:对上报数据的动态修改),通过阅读这个函数不难发现,其实机智云数据上报的原理很简单:1.在主函数中不断修改对应数据的结构体成员,定时器根据设定好的上报时间 进行定时对数据的发出。
下传数据原理:WAN下,客户端出现用户动作后(或定时上报客户端数据)传输服务器转发至路由器,再至设备,设备提取关键字后进行对结构体成员变量的修改。
从上面的阐述不难看出,数据的传递其实就是个共同对maps的更改。:lol
3.gizwitsHandle((dataPoint_t *)¤tDataPoint); 该函数中完成了相应协议数据的处理及数据主动上报的相关操作,主要是根据应的协议对数据做个处理,使userHandle(); 中修改的成员变量植入对应的数据的关键字,及主动发送数据。
下面我们来看看另外一个比较重要的函数
(int8_t gizwitsEventProcess(eventInfo_t *info, uint8_t *data, uint32_t len))
以下是机智云对这个函数的一个介绍:
* 说明:
* 1.用户可以对WiFi模组状态的变化进行自定义的处理
* 2.用户可以在该函数内添加数据点事件处理逻辑,如调用相关硬件外设的操作接口
* @param info : 事件队列
* @param data : 协议数据
* @param len : 协议数据长度
* @return NULL
* @ref gizwits_protocol.h
不多说上图,其实通过这个函数里面 switch的case不难看出,其实就是对wifi模组工作方式的变化,以及是否连接上M2M,是否接连接上服务器等等作个动作的回传(大家可别小看这函数,在后面NTP授时作用很大,主要表现在如果wifi模组没有成功连接上服务器的情况下,用户点击了上述作品设置菜单里的设置时钟建后,NTP那个函数是会回传数据的《8:00》(大家可能会问为什么回传,答案是,服务器没回传,但是协议中的用于存储NTP时间数据的ptime->year等等已被设置初始值8:00;这个是我们在做产品时候不愿意看到的情况,此情况的出现大大降低了用户体验感。那么怎么办呢?楼主用了一个思路 用int8_t gizwitsEventProcess(eventInfo_t *info, uint8_t *data, uint32_t len函数中的
case WIFI_CON_M2M:flag_m2m=1;
break;
case WIFI_DISCON_M2M:flag_m2m=0;
break;
来进行是否连接上服务器的判断,每次用户进行NTP授时的时候,先判断是否连接上服务器,再进行授时。
完美的解决了这个问题。
可能看了上面的帖子后,各位可能会问如何使用机智云的NTP授时功能呢?下面我在这篇帖子里给大家详细讲解《NTP授时之DS1302(其实用啥RTC不重要,应用层都是不变的,底层驱动大家根据说使用的RTC IC自行修改就行)》
case WIFI_NTP:
//GIZWITS_LOG("WIFI_NTP : [%d-%d-%d %02d:%02d:%02d][%d] \n",ptime->year,ptime->month,ptime->day,ptime->hour,ptime->minute,ptime->second,ptime->ntp);
if(flag_m2m==1)
{
time1=ptime->year%2000;
time1=ReturnWeekDay(ptime->year,ptime->month,ptime->day);
time1=ptime->month;
time1=ptime->day;
time1=ptime->hour;
time1=ptime->minute;
time1=ptime->second;
ds1302_init(write1,time1);//设置1302的初始时间
fmq=0;
delay_ms(255);
fmq=1;
delay_ms(255);
}
只用发出NTP授时的函数后,wifi模组接收到对应数据后就会进入此case 用户对对应数据做处理就好咯
来波内部电路板图
:lol
因为当时焊接技术真的不行,焊接贴片太费事,所以本电路板看起来都是模块化设计的,现在看起来当时的电路板真的做的不是太好,还有很多的改进空间:$
介绍了这么多MCU的代码开发,看来是时候看看APP该怎么玩咯。
不多说上APP截图(当时楼主开发APP的时候,还没有那么好的自动生成AS下代码的工程,那时候还要通过开源框架自己修改下,不过其实都差不多。算是见证了机智云的成长吧(再次感谢机智云!)
下面一贴会重点介绍如何实现不同设备(即不同product key设备的布局加载<简单来说就是一个APP支持多种不同设备>)IDE:Android studio
不多说 先上图!
下面晒出要实现不同设备进入不同界面的代码。(其实非常简单,通过看这段程序不难看出楼主的思路其实是首先通过device.getProductKey()方法来得到上面实例化设备的product key作为下面switch 里case跳转的变量;其次再根据不同的product key进行元素的引导和初始化以及对应布局文件的加载。以此实现上述功能。
由于下周一就开始进行高中学业水平考试了,今天就先发这么多吧,楼主的QQ:1034029664 有问题可以来问楼主 尽力解决:lol最后,再次力挺机智云,感谢机智云能够给我提供GK2玩耍,提供这么好的云服务 厉害啦我滴哥,高中我还在做卷子呢哈哈哈,加油!:lol 还让不让人活了
我都大三了还没你玩的6.。
页:
[1]