準備作業:一臺服務器(公網地址為3.139.92.116,之后會反復用到),本人使用的是win server 2016 61bit版本;pycharm professional(專業版); mysql;python3環境(本人使用的是Python3.6);
pycharm用于新建Django工程,網上有很多教程(推薦菜鳥教程中的Django 教程 https://www.runoob.com/django/django-tutorial.html),也可以自行搜索,MySQL用于存盤從樹莓派發來的各種傳感器資料,
首先需要給pycharm配置Python環境,之后是使用pip安裝mysql庫
使用命令:pip install PyMySQL

配置完Python 和安裝完PyMySQL之后可以在pycharm中直接連接資料庫;

我在mysql中新建了iot的資料庫,并且在django中新建了django_dht11_environment模型,資料庫和模型的內容如下:

class Environment(models.Model):
temperatures = models.FloatField()
humidity = models.FloatField()
pressure = models.FloatField()
dateTime = models.DateTimeField(auto_now_add=True)
def to_dict(self):
return {'temperatures': self.temperatures, 'humidity': self.humidity, 'pressure': self.pressure, 'dateTime': self.dateTime }
通過表遷移指令可以根據Model內容在資料庫中新建一張資料表,命令如下:
創建表
$ python manage.py makemigrations
遷移表中的資料
$ python manage.py migrate
執行完表遷移指令后,資料庫中將產生django_dht11_environment表,表中除了id以外,還有temperatures,humidity,pressure,dateTime四個欄位,與model中Environment類中的四個屬性值相對應,這是利用了Django自帶的ORM技術產生的,物件關系映射(Object Relational Mapping,簡稱 ORM )用于實作面向物件編程語言里不同型別系統的資料之間的轉換,這里不詳細講述ORM,想詳細了解的可以自行百度,
在準備作業做完之后,我們需要對外開放兩個介面:
- add_environments,用于樹莓派向服務器提交傳感器資料;
- get_environments,用于通過網路獲取保存在服務器資料庫中的環境值,
首先在django工程中的urls.py檔案中添加兩條路由:
path('add_environments/', views.add_environments, name='add_environments'),
path('get_environments/', views.get_environments, name='get_environments'),
接下來在django工程中的views.py中來實作這兩個介面:
from django.shortcuts import render
import os
# Create your views here.
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
#首先需要匯入Environment
from django_dht11.models import Environment
from django.http import JsonResponse
import time
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
@csrf_exempt
def get_environments(request):
if request.method == "GET":
environments = Environment.objects.latest('id')
context = {}
context['temperatur'] = environments.temperatures
context['humidity'] = environments.humidity
context['pressure'] = environments.pressure
context['dateTime'] = environments.dateTime
return render(request, 'environments.html', context)
@csrf_exempt
def add_environments(request):
if request.method == "GET":
pass
if request.method == "POST":
temperatures = request.POST.get('temperatures')
humidity = request.POST.get('humidity')
pressure = request.POST.get('pressure')
dateTime = time.time()
environments = Environment()
environments.temperatures = temperatures
environments.humidity = humidity
environments.pressure = pressure
environments.dateTime = dateTime
environments.save()
data = {
"status": 200,
"data": environments.to_dict(),
}
return JsonResponse(data=data)
在部署好工程代碼和資料庫之后,便可以運行django工程,我們對外開放80埠:
python manage.py runserver 0.0.0.0:80
中pycharm的終端中直接運行上述命令

現在就可以利用上一篇搭建好的樹莓派環境來提交傳感器引數到web服務器了,
回到上一篇https://blog.csdn.net/qq_30135687/article/details/118882378
直接在部署好代碼的Adafrui_Python_DHT/examples目錄下運行指令:
python AdafruitDHT.py 11 4

得到溫度為27.0℃,濕度為41.0%,氣壓為99.7kPa
<Response [200]>是Web服務器回傳值,200代表資料提交成功,

服務器中已經收到兩個POST請求的HTTP請求,時間分別是在22:35:03和22:36:21,資料庫中也已經將兩個請求的資料保存起來了,將圖中的紅框,內容與樹莓派中顯示的一致,
在通過公網地址http://3.139.92.116/django_dht11/get_environments/

獲取到剛剛樹莓派提交到web服務器的環境資料,
到此, 通過三篇博客已經將樹莓派+傳感器+公網服務器 組件自己的物聯網平臺全部寫完,代碼也都可以自行下載,希望看了有幫助的朋友點贊關注,本人先行感謝,
IOT后臺代碼:https://gitee.com/zhousong918/iot
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/289390.html
標籤:其他
