Page Title

Wi-Fi模块


2021-08-19 10:52:55


概述:


Wi-Fi模块一款基于ESP8266设计的串口转Wi-Fi物联网模块,用以接收和发送物联网信息。内置AT指令固件,适用于3.3V~5V的控制系统。

WiFi模块.png


参数:


尺   寸:48x24mm

工作电压:3.3-5V

工作电流:500mA

接口类型:XH2.54mm-4P

引脚定义:R、T-信号 V-电源 G-地


接口:


串口


使用方式:


搭建信息系统——室内环境实时监测系统



1、好搭Bit使用(基于好搭Block)

image.png

室内环境实时监测系统


(1)硬件连接


通过USB线将好搭Bit连接到计算机,将温度传感器与好搭Bit的P0端口连接。具体连接如图所示。


(2)编写程序


智能终端代码:Haoda:bit 先通过串口配置 WiFi 模块,然后采集温度传感器数值, 拼接为一个 URL 地址,如 http:192.168.60.108:8080/input?id=1&val=22.5

注意:根据实际情况修改 WiFi 的 ID、密码和 IP 地址。


from microbit import *


#*****************************WIFI模块内部代码***************************************************

class Obloq(object):

    ip_address = ''

    def connectWifi(self,SSID,PASSWORD,TIME):

        uart.write('AT+RST ')

        sleep(5000) 

        uart.write('AT+CWMODE_CUR=3 ')

        sleep(1000) 

        uart.write('AT+CWJAP_CUR="%s","%s" ' %(SSID, PASSWORD))      # 设置wifi模块连接无线网络

        # display.scroll("wait...");display.show(Image.HAPPY)

        sleep(8000) 

        return True

        uart.write('AT+CIPMUX=0 ');sleep(500)                   # 设置WIFI模块单路链接模式

        uart.write('AT+CIPSTART="TCP","0",0 ');sleep(TIME)   

        if uart.any():                                              #第二次读,返回服务器IP设置消息

            data = str(uart.read(), "UTF-8");sleep(1000)    

        uart.write('AT+CIFSR ');sleep(2000);data=0               # 设置这个后 读串口返回绑定ip 

        if uart.any():

            data = str(uart.read(), "UTF-8")

            temp = data.split(""",5)

            self.ip_address = temp[1]

            if self.ip_address[0]=='1' and len(self.ip_address)>10: 

                return True

            else:

                display.show(".");sleep(3000)

                return False     

        else:

            display.show(".");sleep(3000)

            return False

                        

    def ifconfig(self):

        return self.ip_address

               

    def httpSet(self,IP,PORT):

        uart.write('AT+CIPSTART="TCP","%s",%s ' %(IP, PORT))  

        sleep(6000)

        uart.write('AT+CIPMODE=1 ')  # 设置WIFI模块为透穿模式

        sleep(500)

        uart.write('AT+CIPSEND ')  # 在透穿模式下开始发送数据

        sleep(3000)

        if uart.any():  # 如果串口有值

            self.res = str(uart.read(), "UTF-8")

            self.res = 0

      

    def get(self,url,time):

        uart.write('GET /'+ url + ' ')  

        sleep(1000)

        if uart.any():  # 如果串口有值

            res = str(uart.read(), "UTF-8")  

            return (200,res)

        return (404,"NOT FOUND")

  

Obloq = Obloq()

#***********************************************************************************************


IP="192.168.60.108"   

PORT="8080"

SSID="haoda"

PASSWORD="1234"


uart.init(baudrate=115200, bits=8, parity=None, stop=1, tx=pin2, rx=pin1)  # 设置串口引脚,连接到wifi模块


while Obloq.connectWifi(SSID,PASSWORD,10000) != True:

    display.show(".")


display.scroll(Obloq.ifconfig())

Obloq.httpSet(IP,PORT)


while True:

    erron,resp = Obloq.get('input?id=1&val=' + str("%.1f"%(pin0.read_analog()*3.3/10.24)), 10000) 

    if erron == 200:

        display.scroll(resp)

    else:

        display.scroll(str(erron))

    sleep(1000*5)

  

Web 服务器端代码:基于 Python 的 Web 应用框架 Flask 编写,下面的代码中提供了默认主页和获取传感器数据的功能。


# coding = UTF-8

import sqlite3

import datetime

from flask import Flask, render_template, request

DATABASE = 'data.db'

app = Flask(__name__)


# root

@app.route("/")

def hello():

    db = sqlite3.connect(DATABASE)

    cur = db.cursor()

    cur.execute("SELECT * FROM sensorlog WHERE sensorid=1")

    temp_data = cur.fetchall()

    cur.close()

    db.close()

    temp1 = temp_data[len(temp_data)-1]

    temp = temp1[2]

    return render_template('index.html', temp_data=temp_data, temp=temp)


# Adding data

@app.route("/input", methods=['POST', 'GET'])

def add_data():

    if request.method == 'POST':

        sensorid = int(request.form.get('id'))

        sensorvalue = float(request.form.get('val'))

    else:

        sensorid = int(request.args.get('id'))

        sensorvalue = float(request.args.get('val'))

    nowtime = datetime.datetime.now()

    nowtime = nowtime.strftime('%Y-%m-%d %H:%M:%S')

    db = sqlite3.connect(DATABASE)

    cur = db.cursor()

    cur.execute("INSERT INTO sensorlog (sensorid, sensorvalue, updatetime) VALUES (%d, %f, '%s')" % (sensorid, sensorvalue, nowtime))

    db.commit()

    cur.execute("SELECT * FROM sensorlist WHERE sensorid=%d" % sensorid)

    rv = cur.fetchall()

    cur.close()

    db.close()

    print(rv)

    maxrv = rv[0][2]

    minrv = rv[0][3]

    if sensorvalue < minrv:

        return '0'

    else:

        return '1'


if __name__ == "__main__":

    app.run(host="0.0.0.0", port=8080, debug=False)


Web 模板文件代码:


<!doctype html>

<body><meta charset="UTF-8" http-equiv="refresh" content="60"></body>

<style>

#center {MARGIN-RIGHT: auto;MARGIN-LEFT: auto;background: #eff7ff;width: 600px;

  height: 500px;vertical-align: left;overflow-y: scroll;overflow-x: scroll}

</style>

<title>室内环境实时监测系统</title>

<h1 align="center">室内环境实时监测系统</h1>

<h2 align="center">当前室内温度:{{temp}}</h2>

<h2 align="center"><a href="/">刷新</a>历史数据列表:</h2>

<div id="center" style="border:2px solid #96c2f1">

    温度   记录时间<br>

    {% for i in temp_data[::-1] %}

        {{i[2]}}   {{i[3]}}<br>

    {% endfor %}

</div>

    

(3)搭建服务器


①在空白处Shift+右键,选择“在此处打开Powershell窗口(S)”。

image.png


②安装Flask模块。在Windows PowerShell输入”pip install flask”,回车。

image.png


③右键选择Edit with IDLE(Python软件)打开服务器端程序。

image.png


④在Python IDLE编辑器中,点击运行模块(F5),或在资源管理器中双击运行.py文件。

image.png


⑤打开浏览器,通过Web访问

通过本机访问,在搭建Web服务器计算机中打开页面http://localhost:8080或http://127.0.0.1:8080。

通过远程访问,打开页面http://192.168.60.108:8080(本例)。


(4)烧录程序


使用BXY软件打开智能终端程序,单击 “烧录” 按钮,haoda:bit开发板上的LED开始闪烁。等到闪烁停止,表示程序上传成功。


(5)结果呈现

image.png


附件


Python代码 


室内环境实时监测系统.rar


AT指令说明


ESP8266 Wi-Fi模块AT指令.pdf