物联网不求人-服务器搭建So Easy
最近我所在的创客交流群里面又双叒叕炸开锅了,大家纷纷表示伤不起,原因是提供的免费blynk物联网服务器宕机了,很多老师有一些重要的项目还在服务器上面,但现在服务器又访问不了,特别是对于那些比赛在即的老师尤其感到绝望,纷纷傻眼,到处“求神拜佛”求拯救方法。以前我对自建物联网服务器并没有这种强烈需求,认为只要用“好心人或者好心厂家”提供的免费服务器就好了,没必要自己搭建,费时费力还费金钱。但直到我亲身经历个人服务器提供者停机与厂家由免费转付费时,才猛然发现原来自己一直都错了,原来免费的才是最“贵”的,果然核心技术还是要掌握在自己手里,自己能够掌控的才是最好的。考虑到云服务器比较贵,个人电脑又不可能一直开机,于是我开始寻求一种低成本高性价比的服务器部署方法,经过不懈努力终于让我找到了这种方法,那就是用ARM的电视盒子使用docker部署创客所需的各种物联网服务器,其中包括常见的Blynk,EMQX,Nodered,Webserver等,下面我将详细介绍如何搭建属于自己的物联网服务器,真正做到物联网不求人。
视频演示
下面让我们来看看这个项目的演示视频,该视频中我们使用自建服务器搭配M5 ATOM SPK实现订阅MQTT服务器播报网络MP3的例子,搭配Nodered,一言API与语音合成实现任意文字播报,按下板载按钮随机播报一段语录:
物联网不求人-服务器搭建So Easy
硬件介绍
ATOM SPK 是一款适配ATOM LITE主控的音频播放器, 内置I2S数字音频接口的功放芯片NS4168,具备自动采样率检测,自适应功能,并能够有效防止音频信号失真。集成TFCard卡槽,便于音频文件的保存与读取。提供3.5mm耳机接口与外部扬声器接口, 用户可通过外接耳机或是扬声器进行音频播放。
硬件特点
- 功放芯片NS4168
- I2S 串行数字音频输入接口
- 支持宽范围采样速率:8kHz~96kHz
- 自动采样率检测,自适应功能
- TFCard卡槽
- 耳机接口
- 扬声器接口
为什么要自建服务器
任何个人或者公司都不能保证永久提供稳定可用的服务,重要服务掌握到别人手中本身就存在巨大风险,就像我所在创客交流群的老师们一样,临近比赛服务器又异常,这无疑是一种致命的问题,辛苦几个月制作的作品,毁于一旦,重做时间又不足。再者单片机本身性能有限,复杂功能很难实现,如果仅仅把单片机用作数据传输,针对特定功能编写简单程序或者烧录特定功能固件(例如这里的M5 ATOM网络MP3播报固件)把复杂的控制逻辑交给服务器来完成,那么将极大的简化整个项目的实现,轻松实现复杂项目,我们的演示视频当中按下ATOM板载按钮ATOM将向设置的MQTT主题发送一个消息为atom的信息,当Nodered的MQTT节点收到此消息后使用网络请求节点请求一言API数据,得到请求数据后将数据添加到语音合成接口参数中,最后将构造后的完整链接发送给ATOM,ATOM收到此链接便可语音播报随机语录了,这样ATOM仅负责收集按钮是否按下并反馈给服务器,同时订阅网络MP3链接主题播报网络MP3,复杂的控制逻辑都交给了Nodered,这样原来较难实现的功能也能轻松实现了,同时可以有机结合所有物联网服务与项目,做到真正的万物互联,搭配上一期的M5StickC语音助理你甚至可以结合聊天机器人接口制作对话机器人给自己解闷。
自建服务器需要那些准备
硬件准备
- 旧电脑或者电视盒子等任何可装Linux的设备;
- 一个U盘(至少16G用于写入镜像);
这里我们使用型号为CM311-1A电视盒子为例,此电视盒子为运营商宽带赠送,某鱼某多价格50+,配置为2+8G架构为ARM,与同为ARM架构的树莓派相比尽管没有千兆网口与USB3.0,但其价格感人,不足同等配置树莓派的1/10,作为个人第一款入门级服务器来说是绰绰有余的,购买时只需告知商店帮刷安卓系统可以从U盘启动系统即可。CM311-1A主视图如下:
docker基础
docker是一种开源项目,用于将应用程序自动部署为可在云或本地运行的便携式独立容器,Docker基础可通过bilibili“Docker 10分钟快速入门”进行了解,通过docker我们可以使用一条指令便可部署服务而无需理会各种环境与配置问题,在这里我们仅需了解镜像,映射端口与挂载点即可,这个我们将下面实际服务器部署中进行说明。
openwrt基础
任何具备docker安装最低要求的Linux系统都可以使用安装docker并部署各种服务,但Linux系统对于习惯了图形化界面的我们来说显得晦涩难懂,因此我们这里使用图形化的openwrt软路由系统,该系统除了普通路由器功能外还内置docker与各种实用插件,例如文件共享,USB打印机服务器,内网穿透等,这里如需详细了解可自行百度查阅相关资料。
开始服务器搭建
镜像烧录
准备一张16G的U盘使用文末附件中的镜像烧录工具烧录openwrt镜像如下
准备从U盘启动系统
电视盒子使用HDMI线连接显示器插电开启,并进入应用主页打开下图所示应用(部分系统此应用名称为U盘启动之类的,具体以实际应用为准)
打开应用后使用遥控选择确认,此时设备系统将会重启,重启显示器黑屏瞬间靠近网口处USB口插入我们烧录镜像的U盘,看到显示器花屏后出现下列字样,此时设备成功从U盘启动了系统。
当显示器显示文本不再更新时使用盒子自带的网线连接电脑与盒子(电脑需断开其他网络)电脑浏览器访问盒子的IP地址192.168.1.1即可进入openwrt管理后台如下
输入默认管理登陆账号root密码password成功进入openwrt管理后台如下:
接下来我们点击左侧的网络→接口→LAN看到如下界面
这里如果你知道自己主路由的网关地址那么你可以按照如下设置,给盒子分配一个静态IP,以后只要同一局域网便可通过手机或者电脑等设备访问你设置的IP地址访问openwrt管理界面,例如下面家里网关为192.168.1.1,我们给盒子分配IP为192.168.1.168。
如果你不想分配IP而是想要盒子由上一级路由自动分配地址那么你可以将盒子设置为DHCP客户端,此时你要通过上级路由的后台手动查看名为openwrt的设备然后通过其IP地址访问管理界面,DHCP客户端设置如下:
以上操作完成后点击下方的保存应用,便可断开盒子与电脑的网线,将盒子与电脑均连接到路由器上面,通过盒子IP地址再次进入openwrt管理后台,此时盒子处于联网状态,接下来我们便可开始部署物联网服务了。
常见物联网服务器部署
Blynk服务器部署
Blynk是一个优秀的物联网平台,它通过图形化拖拽的方式便能让我们轻松搭建APP的图形界面,方便我们制作出各种物联网项目,下面将介绍Blynk服务器的搭建。按照上面方法成功联网并进入openwrt后台后我们选择左侧的Docker→容器→添加如下图
点击命令行并添加docker run -it -p 8080:8080 -p 9443:9443 --name blynk choromanski/blynk-server:arm64v8-java8现在我们来解释一下该命令 --name blynk表示新建容器名称为blynk,-p 8080:8080 -p 9443:9443表示将容器的8080端口与9443端口映射到盒子的8080端口与9443端口,其中第一个8080代表盒子端口后一个8080代表容器端口,choromanski/blynk-server:arm64v8-java8表示镜像名称,该镜像为ARM架构的Blynk服务器镜像,如果你的设备CPU架构为X86那么便要寻找对应架构的镜像才能正常使用。命令输入完成后点击提交便能看到如下所示的界面
当镜像下载完成后我们再按照上述方法依次添加如下命令拉取对应的镜像,其中部分命令如下:
- homeassistant家庭助理docker run -it -p 8123:8123 --name homeassistant homeassistant/home-assistant:latest
- Nodered流程控制docker run -it -e TZ=“Asia/Shanghai” -p 1880:1880 -v node_red_data:/data --name mynodered nodered/node-red:latest
- EMQX服务器(MQTT)docker run -it -p 1883:1883 -p 8081:8081 -p 18083:18083 --name emqx emqx/emqx:4.3.10-alpine-arm64v8
- Web服务器docker run -it -p 80:80 gabxav/webserver:latest
- portainer(Docker管理工具)docker run -d --restart=always --name=“portainer” -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data 6053537/portainer-ce:linux-arm64
添加完以上镜像后我们启用EMQX与Blynk镜像,勾选容器并点击重新启动如下图所示
到这里我们便能局域网下通过自定义Blynk服务器地址访问Blynk了,接下来我们访问EMQX并添加一个账号,我们访问http://ip:18083便来到了EMQX的管理后台如下所示:
输入默认用户名和密码点击登陆,选择Settings设置界面为中文,如下所示
接下来安装如下所示添加一个用户
添加完用户后我们便可以让任意MQTT客户端使用我们的MQTT服务器了。
内网穿透
目前为止我们所有的服务都只能在局域网下使用,如果我们脱离了局域网那么便不能正常使用以上服务器了,为了能够让我们在任何地方都能够访问我们的私有服务器那么便需要一个工具帮我们把内网服务发布出去,这里我们用到的工具便是内网穿透,国内内网穿透比较出名的有花生壳,但它提供的免费流量每月只有2GB且需要一个单独的设备使用其服务,对于我们来说这多少有些不便,其实openwrt本身就自带了两个内网穿透方式,分别是frp与nps,这里我们以frp为例演示如何使用内网穿透公开我们的服务。
frp内网穿透
这里我们以浮居frp为例,进入其官网并注册账号登陆其控制台,左侧点击添加隧道配置需要内网穿透的服务信息配置说明如下所示
这里我们选择免费线路并添加openwrt管理后台与blynk远程控制两条内网穿透线路,添加完成后点击配置文件查看配置信息如下图所示,记录下面的各种授权信息信息如下图
接下来我们点击openwrt控制面板的左侧找到服务→frp内网穿透按照下面所示方法添加自己的账号信息
添加内网穿透线路方法如下
线路添加完成后点击保存并应用,看到frp运行中后通过添加的域名和随机端口号便能打开openwrt的管理后台,到这里恭喜你完成了服务器的搭建与服务公开,现在你能够将你的外网服务地址和端口发给别人,那他们便能享用到你的服务了。
实际应用
演示Nodered程序
如上nodered程序所示,通过订阅按钮主题获取ATOM按钮是否单击,当按钮单击则使用网络请求节点获取一言随机语录文本,获取文本后将其拼接到语音合成接口链接当中作为语音合成参数,最后发送拼接后的完整链接给ATOM并实现语音合成播报功能。除此之外你还可以将其作为闹钟进行整点报时;每日新闻播报等等。单片机若使用传统编程要实现上述功能,程序将变得复杂且不易维护,更不能与其他项目进行有机结合,无法实现真正的“万物互联”,搭配上服务器以后,我们便能实现以前传统单片机编程不敢想以及无法实现的项目,让我们的项目拥有一颗“聪慧的大脑”,达到传统单片机编程无法企及的高度。
程序下载
以上就是自建物联网服务器的全部介绍,如果你想体验演示视频中的ATOM网络MP3项目,那么你可以访问https://docs.m5stack.com/zh_CN/download根据你自己的系统下载M5Burner烧录工具进行安装,打开软件按照下面的步骤进行烧录体验。
文章来源:https://www.toymoban.com/news/detail-735525.html
使用说明
- 下载M5Burner烧录软件
- 打开软件选择ATOM开发板
- 下滑到底部选择ATOM网络MP3播放器下载并烧录固件
- 点击USER CUSTOM登陆或者注册账号
- 进入用户主页点击BurnerNVS跳出弹窗选择对应的串口并连接
- 输入网络信息与本教程自建的MQTT服务器地址等信息
- 各数据输入完成确认并保存后单击复位按钮,ATOM将自动重启并自动连接网络
- 联网前指示灯为红色,联网中为蓝色,联网成功变绿色
- 音频播放开始指示灯变蓝色,播放完成指示灯变绿色
总结
从本教程中我们学习了如何低成本搭建私有物联网服务器,由于文章篇幅限制,没有办法将我们所搭建的其他物联网服务一一介绍,后续我们将通过项目实例逐一介绍私有服务器并了解其如何搭配单片机完成复杂项目,如果你不想购买本文盒子搭建服务器仅仅是体验那么你也可以使用电脑安装docker,并使用本文的docker命令搭建本文中的服务器,这里就不再继续展开,若对本项目感兴趣可查看M5Burner中ATOM网络MP3播放器的详细项目介绍,搭建服务器,考虑到部分朋友可能存在网络问题导致docker镜像下载缓慢或者失败,因此笔者使用16GU盘配置好文中所有镜像并将其设置为DHCP客户端,使用时仅需使用16G以上U盘烧录该镜像按照文中的方法使用即可。文章来源地址https://www.toymoban.com/news/detail-735525.html
到了这里,关于物联网不求人-服务器搭建So Easy的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!