最近物联网是如此的热门,公司的老大都忍不住要弄个探索的研究开发了,但是我们公司是做App和网站的好吧,于是自己不幸被抓包了;
做事之前先百度一下关于物联网的概念——物联网是新一代信息技术的重要组成部分,也是“信息化”时代的重要发展阶段。其英文名称是:“Internet of things(IoT)”。顾名思义,物联网就是物物相连的互联网。这有两层意思:其一,物联网的核心和基础仍然是互联网,是在互联网基础上的延伸和扩展的网络;其二,其用户端延伸和扩展到了任何物品与物品之间,进行信息交换和通信,也就是物物相息。物联网通过智能感知、识别技术与普适计算等通信感知技术,广泛应用于网络的融合中,也因此被称为继计算机、互联网之后世界信息产业发展的第三次浪潮。物联网是互联网的应用拓展,与其说物联网是网络,不如说物联网是业务和应用。因此,应用创新是物联网发展的核心,以用户体验为核心的创新2.0是物联网发展的灵魂。
由于是简单的实验,我就采用了stm32 板子,定时收集传感器数据,通过串口转wifi连接网络上传,同时关注serve端传过来的消息;其中我这边socket连接服务器是在串口转wifi模块中设置好服务器的ip和port,这就不用我在stm32中操心了;当然也可以在stm32 中同过串口设置 串口转wifi模块 进入AT模式来控制socket的连接和断开,所以移植过来的mqtt代码中可以去掉这一块了;——对了,差点忘记了,关于mqtt的demo很多,网上下了一大堆源码,从中找了一个embed 相关的subscribe的 C源码;
原本以为这是一件很简单的事情,源码有了,stm32 开发用了keil4,用C来编写毫无问题;不管三七二十一的把.h和.c文件全部copy过来,。。。。于是问题来了,人间的代码是在linux上跑的,我这个stm32单片机上没有系统,代码中的那些.h文件十有八九不能用,于是只能辛辛苦苦的根据main函数一步一步的把代码拷过来,还好,大部分源码都不用改动,要改的只有两个方面,一是涉及系统时间的,这方面我就用单片机的定时器计时,二是源码中的socket 的read和write我用stm32串口来get和send;
大框架已经搭好,于是一步步配置好,进入循环中不断subscribe和publish就可以了;由于我下的源码是只有subscribe的,我无法知道人家是如何实现同时接受和发送的,但我想linux上多半是开个线程就可以了;由于我用的是stm32,没法开多线程,于是初学单片机的我傻眼了,我就简单粗暴的再while循环中先subscribe在publish,很明显,这绝对是错误的,运行起来服务器那里一发消息过来,我这边就很容易挂掉;于是我在想,linux的多线程在底层是怎么实现的呢?是不是和以前学到的所谓时间片的分配有关,那我岂不是没那个能力来实现了?好吧,这个问题看俩很深奥,留给以后的我给解决吧;作为初学者,我就采用了建立一个buffer,串口中断接收数据放到buffer中,循环中判断buffer有数据的话就去处理,没有的话就去publish;这样一个模型就畅快的建立起来了;