在大学里不同专业有着不同的追求:机械类与强电类专业学生追求的是 “机电合一” ,既懂机械又懂电气,整个电气机械自动化便能打通。弱电类专业学生追求的是 “软硬结合” ,既懂硬件又懂软件,整个电子产品便能打通。我作弱电类学生,追求软硬结合,既懂点硬件,也懂点软件,一个人能解决一个产品整个研发过程,任何创意想法基本都能靠自己去思考设计、动手实现。

本篇视频

 视频一般放到B站中,大家可以 跳转进入登陆后看到高清视频 。由于本人是广东农村人,小学初中都是粤语教学为主,所以普通话说得有点“广东特色”,同时由于工作特点与人交流得比较少,沟通表达能力还有待提高,说话时时会有“卡顿感”。沟通表达能力十分重要,所以我最近也喜欢去玩线上的剧本杀,跟人说说话提升沟通表达能力。部分旧的视频是很久之前录制的纯演示视频,是没有声音的。大家可以给我的B站视频 点赞、投币、收藏、关注 ,来支持我继续对本教程的维护。(PS:别看十几个小视频内容很少,我估计真要自学,实践起来,至少是投入一两个月才正常。

整个物联网项目简介

 现在,我想做一个完整的物联网项目,首先要搞清所有环节。当年我毕业设计(2017年毕业)的项目示意图【提示:本教程里的所有图片都能点击放大】:
物联网项目
 一个物联网项目如图所示,从左到右分别是用于采集数据的硬件传感器,硬件主控芯片(对应STM32)、用于传输数据的通信模块(对应WIFI芯片ESP8266)、用于存诸数据与提供访问请求的 云服务器 、用于将数据展示出来并提供操作的可视化界面(即浏览器上的网页显示)。很多人都是只懂硬件,或者只懂软件,大家的疑问点如图所示:

只懂硬件与只懂软件

 针对不懂硬件的读者,其实这个教程里的硬件内容很简单,我会使用号称电子积木的Ardunio进行演示,难度不高,相关教程也很多。(当然,实打实地学硬件开发知识其实是比学软件难很多,花费与门槛都高很多,但是在这个教程里并不会涉及到,这里演示十分简单。)
 针对不懂软件的读者,主要疑点在于 云服务器 ,在大一大二我们做的纯硬件项目大约是这样的:硬件采集完数据,传输到相连的LCD显示屏直接显示出来。但是如果说,我想远在千里,拿着手机想看这数据时,我是看不到的。为什么?因为手机无法拿到这样的数据。
 那么,我们的手机平时上网拿的数据是来自于哪里?(上网所刷的网页,视频本质上都是数据,这些数据从何而来?)

与云服务器的交互是关键点
 答案是:所有数据都存放云服务器,云服务器你可以理解为是一台电脑。这台电脑不仅存放了这些数据,而且能够在你请求获取这些数据时把数据传输给你。这台电脑就是存放在数据中心机房里的服务器,持续稳定地24小时不间断地运行,为用户提供服务。由专门的运维人员进行管理维护,这些云服务器可以在阿里云、腾讯云(后面演示会使用腾讯云)等云服务器厂商租用(当然你也可以自己买一台真实的服务器扔在自己家里玩)。
 所以,物联网项目最重要的环节就是:硬件与云服务器相关联起来。 关联起来后,硬件就能把数据上传到云服务器,手机就能从云服务器拿到数据并展示出来。手机能向云服务器发送控制命令,云服务器把控制命令转发给对应的硬件,硬件接收到控制命令后执行操作。
 但写教程的过程中发现,如果用当年我毕设的方案来讲解,难度比较高。硬件方面STM32有一定门槛的,一般大学生到了大三能用它做几个项目都被称为大神了(top5,电子科大等好学校除外)。硬件与服务器通信协议上,当年的我走了弯路,选择了websocket协议(当年机智云很火,我模仿了它),而整个ESP8266官方固件开发相对较难(就是它浪费了我很多时间)。经过思考选择,为了降低难度,降低门槛。硬件改用NodeMCU(十几块钱就能淘宝到)配合Ardunio进行开发,温度传感器可买可不买(我个人感觉可以不买,直接用程序模拟就好了),降低门框优化之后的示意图:

降低门框

 当然,软件部分也是这个教程里的重要一环,在后端与前端界面的开发上,其实有很多选择,这里我选择的是大前端,即以JavaScript为主,这是最佳选择,详细原因我已经放到教程特点与历程 里进行解释。
无所不能的JS

整个教程面向完全零基础读者,此教程的第一目标是保证读者在没任何基础的情况下跟着做一定能做得出来。如果你跟着做不出来,务必进QQ群(638456092)来提问,我会亲自回答并且完善教程!!

 在github上获取整个项目的最新完整代码:
获取全部源码

教程目录

 教程中大量演示视频是放在B站上的,在本网站上看不到高清,大家可以操作跳转到B站看高清内容。另外,有些V1录制的视频是没有声音的。(最近V2升级中,内容有较大改动。)
 按学习顺序排列如下:

可选择性补充学习:

整个教程看似内容很少,实质上是需要读者阅读七八本书以及结合其它教程一起学习,其实需要读者学习的内容是极其之多,本教程只是演示最简单的实例给大家一个例子以参考,有利于进行正确有效的学习,少走弯路。(所以别以为看完就这十几个小视频就以为很简单,我的指点只能保证少走弯路,但是该走的路一步都不能省,我估计真要实践起来,花一两个月时间都是正常的。)
推荐书籍

FAQ

  1. 我只懂硬件,想做一个小程序能显示数据,能简单控制,想知道具体要怎么搞?
    答:把本教程demo1搞定,你就能清楚明白要怎么搞了。
  2. 请问要实现自己搭物联网平台大约需要多久?
    答:我当时为了做毕设,从零搞起也就几个月的事,里面包含了大量走弯路的时间,当然功能也不完善,前端界面做得很简陋,也就能显示数据能实现控制而已。如果你按这教程走,少了走弯路的时间,遇到迷茫时提问,一般来说两个月左右(每天投入8小时以上)就能搞出来一个demo1与demo2的效果。如果你是那种没有任何编程经验的萌新,毕竟光学习怎么写代码都需要一个时间与过程,所以需要更长的时间。
  3. 有没有现成的相关代码,能快速复制粘贴很快就做一个简单的?
    答:后台管理系统参考vue-element-adminNodeclub论坛,软硬件之间的通信参考demo2
  4. 请问能做电脑上位机程序吗?
    答:电脑上位机程序其实就是PC桌面应用,以前的常见做法是C#/JAVA 加一个图形库进行开发,如果用JS可使用Electron进行开发,界面仍然是网页制作的那一套。
  5. 为什么我提的问题,没人回答?
    答:因为你缺失提问技巧,请先搜索“提问的智慧”,学习后你就知道怎么正确提问,让别人有回答的欲望 。
    提问的智慧
  6. 我是新手,连硬件都没接触过,应该怎么学?
    答:此教程讲硬件讲得比较少,没接触过硬件的要么是大学新生还没学习到,要么本身专业与硬件没关。对于还没接触过硬件都又想学硬件的朋友来说,可以学习 Ardiunuo ,号称电子积木,非常适合硬件新手入门,相关教程也十分丰富。
  7. 除了使用NodeMCU还能用其它设备吗?
    答:NodeMCU在这里是充当通信设备的作用,负责把数据通过WIFI上传到服务器。一般室内使用WIFI,室外使用4G模块、NB-IOT模块等等。本质就是需要一个通信模块(提供上网功能)来把数据上传到服务器中。