ESP32 MicroPython Web Server –网页显示传感器数据

MicroPython相关代码、库、软件、工具
回复
头像
shaoziyang
帖子: 3917
注册时间: 2019年 10月 21日 13:48

ESP32 MicroPython Web Server –网页显示传感器数据

#1

帖子 shaoziyang »

来自:
隐藏内容
你必须登入/注册才可观看隐藏内容
 

目录
  • 概述:ESP32 MicroPython Web Server
  • 材料清单
  • 什么是Web服务器?
  • 电路图和连接
  • MicroPython代码/程序
  • boot.py代码
  • main.py代码
  • 在ESP32 MicroPython Web Server上监控传感器数据
  • 视频教程和指南
概述:ESP32 MicroPython Web Server

在本文中,我们将学习基于ESP32 MicroPython的Web服务器。我们将DS18B20防水温度传感器与ESP32连接并读取温度。然后,我们将创建一个Web服务器并将DS18B20温度数据发送到Web服务器。使用IP地址,我们将监视网页上的Sensor数据。您可以在本地网络上访问Sensor数据。但是在开始之前,我强烈建议您按照以下教程来提高MicroPython的技能。我已经解释了如何安装MicroPython和使用uPyCraft IDE。同样,我也说明了如何使用MicroPython Code将 DS18B20温度传感器与ESP32 连接
  1. 使用PyCraft IDE在ESP32上使用MicroPython入门
  2. 使用MicroPython将DS18B20温度传感器与ESP32连接
 材料清单

以下是制作ESP32 MicroPython Web Server Project所需的组件。所有组件均可从Amazon轻松购买。
  1. ESP32开发板
  2. 温度感应器
  3. 4.7K电阻器
  4. 杜邦线
  5. 面包板
图片


 什么是Web服务器?

一个Web服务器是服务器软件专门用于运行软件,能够满足客户端请求的对万维网。Web服务器可能包含一个或多个网站。Web服务器通过HTTP和其他一些相关协议处理传入的网络请求。Web服务器的主要功能是存储,处理交付网页客户端。客户端和服务器之间的通信使用超文本传输​​协议(HTTP)进行。交付的页面是最常见的HTML文档,除了文本内容外,还可能包括图像,样式表和脚本。用户代理(通常是Web浏览器或Web爬网程序)通过使用HTTP 发出对特定资源的请求来启动通信,并且服务器以该资源的内容或错误消息(如果无法执行此操作)为响应。您可以查看以下教程,以了解有关ESP32 Web Server的更多信息:Web Server上的ESP32 Weather Station


电路图和连接

这是使用MicroPython代码将DS18B20温度传感器与ESP32接口的电路图。数字输出引脚连接到ESP32 GPIO22引脚。甲4.7K电阻被用作上拉电阻与被连接的数字输出管脚VCC和销之间。如果您想了解有关DS18B20温度传感器的更多信息,可以阅读以下文章:DS18B20温度传感器与ESP32的接口

 图片

如果使用的是MakePython ESP32 Board,可以进行以下连接,如下面的连接图所示。

 图片

MicroPython代码/程序

现在让我们检查ESP32 MicroPython代码用于创建Web服务器。该代码包含两个部分。
  1. boot.py
  2. main.py
boot.py在设备启动后运行,并立即设置多个配置选项,例如您的网络凭据,导入库。同样,main.py在boot.py之后立即执行。这是我们处理网络服务器的主要脚本。


boot.py代码

创建于uPyCraft IDE一个新的文件并将其保存为boot.py。然后复制以下代码并将其上传到ESP32开发板。

代码: 全选

try:
  import usocket as socket
except:
  import socket
  
from time import sleep
from machine import Pin
import onewire, ds18x20
 
import network
 
import esp
esp.osdebug(None)
 
import gc
gc.collect()
 
ds_pin = Pin(22)
ds_sensor = ds18x20.DS18X20(onewire.OneWire(ds_pin))
 
ssid = 'Alexahome'
password = 'loranthus'
 
station = network.WLAN(network.STA_IF)
 
station.active(True)
station.connect(ssid, password)
 
while station.isconnected() == False:
  pass
 
print('Connection successful')
print(station.ifconfig())

main.py代码

创建于uPyCraft IDE另一个文件并将其保存为main.py。然后复制以下代码并将其上传到ESP32开发板。

代码: 全选

def read_ds_sensor():
  roms = ds_sensor.scan()
  print('Found DS devices: ', roms)
  print('Temperatures: ')
  ds_sensor.convert_temp()
  for rom in roms:
    temp = ds_sensor.read_temp(rom)
    if isinstance(temp, float):
      msg = round(temp, 2)
      print(temp, end=' ')
      print('Valid temperature')
      return msg
  return b'0.0'
  
def web_page():
  temp = read_ds_sensor()
  html = """<!DOCTYPE HTML><html><head>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous">
  <style> html { font-family: Arial; display: inline-block; margin: 0px auto; text-align: center; }
    h2 { font-size: 3.0rem; } p { font-size: 3.0rem; } .units { font-size: 1.2rem; } 
    .ds-labels{ font-size: 1.5rem; vertical-align:middle; padding-bottom: 15px; }
  </style></head><body><h2>ESP32 DS18B20 WebServer</h2>
  <p><i class="fas fa-thermometer-half" style="color:#059e8a;"></i> 
    <span class="ds-labels">Temperature</span>
    <span id="temperature">""" + str(temp) + """</span>
    <sup class="units">&deg;C</sup>
  </p>
    <p><i class="fas fa-thermometer-half" style="color:#059e8a;"></i> 
    <span class="ds-labels">Temperature</span>
    <span id="temperature">""" + str(round(temp * (9/5) + 32.0, 2)) + """</span>
    <sup class="units">&deg;F</sup>
  </p></body></html>"""
  return html
 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 80))
s.listen(5)
 
while True:
  try:
    if gc.mem_free() < 102000:
      gc.collect()
    conn, addr = s.accept()
    conn.settimeout(3.0)
    print('Got a connection from %s' % str(addr))
    request = conn.recv(1024)
    conn.settimeout(None)
    request = str(request)
    print('Content = %s' % request)
    response = web_page()
    conn.send('HTTP/1.1 200 OK\n')
    conn.send('Content-Type: text/html\n')
    conn.send('Connection: close\n\n')
    conn.sendall(response)
    conn.close()
  except OSError as e:
    conn.close()
    print('Connection closed')
在ESP32 MicroPython Web Server上监控传感器数据

上载两个代码后, ESP32板上的Reset按钮。ESP32现在将尝试使用网络凭证连接到网络。连接后,它将在Shell窗口中显示IP地址

图片


您可以复制IP地址并转到任何Web浏览器并将其粘贴到此处。您将在网页上看到DS18B20传感器数据。

图片


 
 
 
 

回复

  • 随机主题
    回复总数
    阅读次数
    最新文章