python 物联网服务器_构建Flask和Python物联网服务器五部曲:设置、Web API、验证和时间戳记、添加数据库...

背景知识视频教程

使用Flask进行专业的Python Web开发​viadean.com使用Flask构建RESTful API​viadean.com物联网基础:操作系统应用程序 - 国外课栈​viadean.com

介绍

物联网(IoT)是由相互连接的计算机,电话,平板电脑和诸如恒温器,车库门开启器,灯泡,门铃摄像头,气象站之类的物理设备组成的网络。 当我们谈论Internet时,通常是指与网页,程序和应用程序通信的计算机,平板电脑,电话和服务器。 物联网通过包含除计算机,电话,平板电脑和服务器以外的设备在Internet上的构建。

物联网设备

我有两个基于ESP8266的WiFi气象站。 这些小设备是物联网的一部分。 气象站由ESP8266微控制器和通过跨接线和面包板连接的温度传感器组成。 基于ESP8266的WiFi气象站将温度测量结果传输到云中的服务器。 这些WiFi气象站是物联网设备。

物联网服务器

与物联网设备交互的服务器(如基于ESP8266的WiFi气象站)称为物联网服务器或IoT服务器。 物联网服务器与物联网设备通信。 在该项目开始时,基于ESP8266的WiFi气象站与http://ThingSpeak.com物联网服务器进行通信。 WiFi气象站将温度测量结果发送到保存数据的http://ThingSpeak.com IoT服务器。

物联网服务器需求

IoT服务器需要实现两个主要功能:

从两个基于ESP8266的WiFi气象站接收并存储温度测量值

将两个基于ESP8266的WiFi气象站测得的温度发布到网页中

项目步骤

使用flask和Python构建IoT服务器是一个多部分的问题。我们可以将问题分解为以下步骤:

设置

构建在云中运行的基于Flask的服务器(Digital Ocean)

组装WiFi气象站的硬件

使用flask和Python构造一个Web API,以接受来自Web浏览器的请求并保存数据点

将数据库添加到服务器以保存来自WiFi气象站的数据点

在基于ESP8266的WiFi气象站上上传代码,以使用服务器的Web API发送温度测量值

设置

在本文中,我们将描述项目中使用的服务器设置和微控制器硬件。

前提

服务器

Digital Ocean云服务器(从现在开始仅称为服务器)

连接到服务器的域名

PuTTY或可以SSH进入服务器的终端

服务器上的非root用户sudo用户

以下软件包apt-get安装在服务器上:python3-pip python3-dev python3-setuptools python3-venv build-essential libssl-dev libffi-dev nginx

在服务器上安装了flask和uwsgi pip的Python 3.6虚拟环境

uWSGI和NGINX安装在服务器上的配置上

Flask应用程序作为系统服务运行

附加到域名和NGINX实例的SSL

硬件

以下是用于构建基于ESP8266的WiFi气象站的硬件列表。

请注意,作为该项目的一部分,我使用了两个ESP8266微控制器。 一个ESP8266连接到BMP280温度传感器,另一个ESP8266连接到MCP9808温度传感器。 这两个温度传感器是以前项目中遗留下来的(我本来应该使用两个相同的传感器,但是我所用的是一个BMP280和一个MCP9808)。

一个ESP8266-温度传感器组合用于测量外部温度,另一个ESP8266-温度传感器组合用于测量内部温度。

起点

我构建的flask应用程序是相对基本的,主要包含2个文件:flaskapp.py和index.html。 Digital Ocean服务器上的文件结构如下所示:

~/└── flaskapp ├── flaskapp.ini ├── flaskapp.py ├── flaskapp.sock ├── flaskappenv ├── templates │ ├── index.html └── wsgi.py

~/└── flaskapp ├── flaskapp.ini ├── flaskapp.py ├── flaskapp.sock ├── flaskappenv ├── templates │ ├── index.html └── wsgi.py

~/└── flaskapp ├── flaskapp.ini ├── flaskapp.py ├── flaskapp.sock ├── flaskappenv ├── templates │ ├── index.html └── wsgi.py

~/└── flaskapp ├── flaskapp.ini ├── flaskapp.py ├── flaskapp.sock ├── flaskappenv ├── templates │ ├── index.html └── wsgi.py

~/└── flaskapp ├── flaskapp.ini ├── flaskapp.py ├── flaskapp.sock ├── flaskappenv ├── templates │ ├── index.html └── wsgi.py

~/└── flaskapp ├── flaskapp.ini ├── flaskapp.py ├── flaskapp.sock ├── flaskappenv ├── templates │ ├── index.html └── wsgi.py

~/└── flaskapp ├── flaskapp.ini ├── flaskapp.py ├── flaskapp.sock ├── flaskappenv ├── templates │ ├── index.html └── wsgi.py

~/└── flaskapp ├── flaskapp.ini ├── flaskapp.py ├── flaskapp.sock ├── flaskappenv ├── templates │ ├── index.html └── wsgi.py

~/└── flaskapp ├── flaskapp.ini ├── flaskapp.py ├── flaskapp.sock ├── flaskappenv ├── templates │ ├── index.html └── wsgi.py

运行flask应用程序的主要文件是flaskapp.py

>

flask应用程序用于构建网页的唯一jinja模板位于/ templates目录中,名为index.html:

>

创建了flask应用程序并配置了域名,nginx,uWSGI,systemd和SSL后,该应用程序将在服务器上启动,并具有以下功能:

>

生成的网页如下所示:

Web API

我们已经在Digital Ocean上托管了一个工作Flask应用程序。现在,我们需要将Web API添加到flask应用程序的功能中。

什么是web API

Web API是基于Web的应用程序编程接口。这是一种幻想的说法,即服务器根据服务器从Web浏览器接收的URL保存输入或生成输出。

Web API的一个示例是http://ThingSpeak.com Web API。当网络浏览器(例如chrome)定向到以下URL时:

channel 266256

field 2

last entry

.txt format

如果粘贴到Web浏览器中的URL不同,则http://ThingSpeak.com的响应也将不同。

对上述URL的响应是存储在http://ThingSpeak.com上的数据条目,其对应于:

channel 9

field 1

last entry

.json format

大多数Web API允许您从其服务器中提取数据,但是许多Web API也使您能够在其服务器上放置数据。

如果粘贴到Web浏览器中的URL的格式如下,http://ThingSpeak.com将存储一个新的数据点。

user with an API Key = THECLASSAPIKEY

field = 1

data = 87

我们将使用flask构建的Web API需要完全满足http://ThingSpeak.com Web API实现的两个基本功能:

根据Flask IoT服务器接收的特定URL输出数据点

根据Flask IoT服务器接收的特定URL存储数据点

Web API设计

我们将在Flask IoT服务器Web API中模仿http://ThingSpeak.com Web API的一部分。 为了基于服务器接收的URL存储数据点,我们需要指定URL的结构。 我们基于ESP8266的WiFi气象站需要知道URL格式,才能将数据点发布到Flask IoT服务器上。

数据将基于服务器从基于ESP8266的WiFi气象站接收的URL存储在我们的Flask IoT服务器上。

每个基于ESP8266的WiFi气象站都有几个独特的方面:

用户:每个WiFi气象站都有一个用户。在这种情况下,用户就是我。

mac地址:mac地址是分配给每个硬件的唯一地址。每个基于ESP8266的WiFi气象站都有一个不同的mac地址。

字段:基于ESP8266的WiFi气象站具有输出温度和湿度的功能。 现在,我们将要处理温度,但是最好为同一设备的多个数据流(例如温度和湿度)提供一个额外的字段。

数据:每个基于ESP8266的WiFi气象站的温度测量值。

如果我们将这4个标识符作为Web API URL的一部分,我们的IoT服务器将提供WiFi气象站所需的功能。

我们的Web API URL的一般形式如下:

在上面的网址中,我们提供了:

update(告诉IoT服务器保存数据点,而不仅仅是提供网页)

API_key=ASCIISTR(识别用户)

mac=6c:rf:7f:2b:0e:g8(识别基于ESP8255的WiFi气象站)

field=1(指定数据是温度,而不是湿度)

data=72.3(指定温度为72.3度)

现在,当出现类似于我们上面指定的URL时,我们需要使Flask IoT服务器保存数据点。

构造一个Flask Web API

由于flask可以选择在路由中包含变量,因此在flask中构建Web API非常容易。通用语法如下:

@app.route("/update/key=", methods=['GET'])def update(route_var): # code to run return render_template("index.html")

@app.route("/update/key=", methods=['GET'])def update(route_var): # code to run return render_template("index.html")

@app.route("/update/key=", methods=['GET'])def update(route_var): # code to run return render_template("index.html")

@app.route("/update/key=", methods=['GET'])def update(route_var): # code to run return render_template("index.html")

在上面的代码中,路由"/update/key="中包含变量。 大于/小于符号<>告诉flask路径中有一个变量。 在第二行中,变量route_var(来自@ app.route()行)作为参数传递给update()函数。 最后,update()函数返回一个名为index.html的模板。

建立新路由

在Flask Web API的@ pp.route()URL中分配了四个变量:

参阅构建Flask和Python物联网服务器五部曲:设置、Web API、验证和时间戳记、添加数据库、代码上传​viadean.com

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值