最近搜索

物联网第一节,esp8622 - 初体验

浏览:898
管理员 2023-07-01 06:45

esp8266通过usb连接电脑后,显示如下:


image.png


安装驱动。cp2102

这是一个 USB 转串口的驱动。

image.png

这个安装包,在电脑桌面有如下。

image.png


更新驱动显示我们的硬件

上面的驱动安装好之后。

右击更新一下驱动。  更新有一个搜索驱动。

image.png




成功显示如下

image.png



上传固件到esp 8622


image.png


点击config 选择一个固件。 我用的是第一个。

image.png

image.png

点击 Operation---点击flash

image.png


image.png


esp 8266 主板上面蓝色的灯一直在闪。


结束如下:

image.png





下载固件-MicroPython 。


http://www.micropython.org/download/esp8266/


image.png


使用上面的工具上传固件也行。flasher



还有一种方法。使用命令行的方式 烧录固件,上传固件。

(这个没有试过,不知道行不行。)


这里采用 esptool 的脚本来进行烧录,esptool 通过 pip 来下载

python -m pip install esptool

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple esptool (使用这个命令安装。)

这里安装 esptoll有个问题,pip报错。然后换个项目 执行没有问题了。



通过“设备管理器”确认NodeMCU开发板的连接端口号,然后清除开发板固件信息

python -m esptool --port COM5 erase_flash

清除执行结果 如下?

image.png


最后,刷入 MicroPython 固件

python -m esptool --port COM5 --baud 115200 write_flash --flash_size=detect 0 D:\InstallPackage\esp8266-20210418-v1.15.bin

执行结果如下:

image.png


上面这个COM5是这个意思  有些人可能是COM3

image.png



如何上传代码到esp8266  需要用到下面这个工具。

下载连接:https://www.wbudowane.pl/download/

image.png


image.png

注意一点,上传的文件必须是main.py

代码如下:就是连接我的wifi。


import network
import urequests
import time
import machine
import dht
import json

dh = dht.DHT11(machine.Pin(4))

# 树莓派上的服务端口
api_url = "http://korilweb.cn:8090/data"

# 因为有时候带到不同的地方,学校,家里,还有公司
# 所以用一个 dict 存放所有的 WiFi 信息
wifi_dict = {
    "home": ["chenhao_jia", "chenhao123"],
    "phone": ["djhxiaomi", "0987654321"]
}


# 对某个WiFi进行连接
def do_connect(SSID, PASSWORD):
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    if not wlan.isconnected():
        print("connecting to " + SSID)
        wlan.connect(SSID, PASSWORD)

    start = time.time()
    while not wlan.isconnected():
        time.sleep(1)
        # 超过5秒,认为连接超时
        if time.time() - start > 5:
            print("connect timeout!")
            break
    # 连接成功,返回 True,打印 wlan 信息
    if wlan.isconnected():
        print('network config:', wlan.ifconfig())
        return True
    # 连接失败,返回 False
    return False


# 对 WiFi 字典进行遍历,某一个连接成功,就发送数据
def connect_wifi(wifi_dict):
    for wifi_info in wifi_dict:
        is_connected = do_connect(wifi_dict[wifi_info][0], wifi_dict[wifi_info][1])
        if is_connected:
            time.sleep(1)
            while True:
                time.sleep(1)
    print("no wifi")

connect_wifi(wifi_dict)

效果如下:输入wifi信息和ip

image.png



这个不显示中文。

image.png


http 请求代码


import network
import urequests
import time
import machine
import dht
import json

# 因为有时候带到不同的地方,学校,家里,还有公司
# 所以用一个 dict 存放所有的 WiFi 信息
wifi_dict = {
    "home": ["chenhao_jia", "chenhao123"],
    "phone": ["djhxiaomi", "0987654321"]
}

#服务
web_site="http://z77wig.natappfree.cc";
test_api_url = "/esp8266/get"



# 对某个WiFi进行连接
def do_connect(SSID, PASSWORD):
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    print("对wifi进行连接")
    if not wlan.isconnected():
        print("connecting to " + SSID)
        wlan.connect(SSID, PASSWORD)

    start = time.time()
    while not wlan.isconnected():
        time.sleep(1)
        # 超过5秒,认为连接超时
        if time.time() - start > 5:
            print("connect timeout!")
            break
    # 连接成功,返回 True,打印 wlan 信息
    if wlan.isconnected():
        print('network config:', wlan.ifconfig())

        return True
    # 连接失败,返回 False
    return False


# 对 WiFi 字典进行遍历,某一个连接成功,就发送数据
def connect_wifi(wifi_dict):
    for wifi_info in wifi_dict:
        is_connected = do_connect(wifi_dict[wifi_info][0], wifi_dict[wifi_info][1])
        if is_connected:
            print("wifi-conn-success")
            break

# 发送传感器数据
def send_data():
    sensor_data = {
        "temperature" : 2222,
        "humidity" : 3333
    }
    headers = {
        "Content-Type" : "application/json"
    }
    response = urequests.post(
        web_site+test_api_url,
        data = json.dumps(sensor_data),
        headers = headers
    )
    print(response.text)

def fun():
    connect_wifi(wifi_dict)
    send_data()

fun()





    
使用java代码这样接受。

    /**
     *
     * @return
     */
    @RequestMapping("/esp8266/get")
    @ResponseBody
    public JSONObject test_get(HttpServletRequest request) throws Exception {
        

        StringBuffer sb = new StringBuffer();
        InputStream is = request.getInputStream();
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);
        String s = "";
        while ((s = br.readLine()) != null) {
            sb.append(s);
        }
        String result1 = sb.toString();
        System.out.println(result1);


        System.out.println("esp8266  get " );
        JSONObject reJsonObject = new JSONObject();
        reJsonObject.put("success", true);
        reJsonObject.put("data", "成功--get-success");
        return reJsonObject;
    }
}

=================



@RestController
public class HelloController {

    @PostMapping(value = "/data")
    public String data(@RequestBody Sensor sensor) {
        System.out.println("temp: " + sensor.getTemperature());
        System.out.println("humidity: " + sensor.getHumidity());
        return "get data";
    }
}


public class Sensor {

    // 温度
    private Integer temperature;
    // 湿度
    private Integer humidity;

    public Integer getTemperature() {
        return temperature;
    }

image.png


micorpython 控制台有报错:

image.png


接受中文数据 有下面异常,数据好像少一节一样:

image.png

image.png



使用总结:

1:使用ESP8266Flasher.exe 刷入miscroPython 固件不行。能刷成功,但是不能上传代码。

2:esp8266 使用get代码有报错,上面有截图。不知道原因。

3:使用  response = urequests.post发送中文好像有异常。





温度传感器的接法。



VCC  --- 电源正极  3v

DATA --- 数据输出  接d1 d2 都可以。

GND---- 电源负极  主板的G=GND


DHT11 DHT11是一款有已校准数字信号输出的温湿度传感器。 其精度湿度±5%RH, 温度±2℃,量程湿度5-95%RH, 温度0~+50℃。



三个引脚,VCC 接 NodeMCU的3v,

GND 接地,

信号线接某个引脚,这里我接的是 D2,对应 GPIO4。



NodeMCU开发板Pin ESP8266 内部 GPIO Pin 编号

D0 GPIO16

D1 GPIO5

D2 GPIO4

D3 GPIO0

D4 GPIO2

D5 GPIO14

D6 GPIO12

D7 GPIO13

D8 GPIO15

D9/RX GPIO3

D10/TX GPIO1

D11/SD2 GPIO9

D12/SD3 GPIO10


代码如下:

import network
import urequests
import time
import machine
import dht
import json

# 因为有时候带到不同的地方,学校,家里,还有公司
# 所以用一个 dict 存放所有的 WiFi 信息
wifi_dict = {
    "home": ["chenhao_jia", "chenhao123"],
    "phone": ["djhxiaomi", "0987654321"]
}

#服务
web_site="http://3qqj4y.natappfree.cc";
test_api_url = "/esp8266/get"


#
#NodeMCU开发板Pin ESP8266 内部 GPIO Pin 编号
#D0    GPIO16
#D1    GPIO5
#D2    GPIO4
#D3    GPIO0
#D4    GPIO2
#D5    GPIO14
#D6    GPIO12
#D7    GPIO13
#D8    GPIO15
#D9/RX GPIO3
#D10/TX    GPIO1
#D11/SD2   GPIO9
#D12/SD3   GPIO10
#
dh = dht.DHT11(machine.Pin(5))

# 对某个WiFi进行连接
def do_connect(SSID, PASSWORD):
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    print("对wifi进行连接")
    if not wlan.isconnected():
        print("connecting to " + SSID)
        wlan.connect(SSID, PASSWORD)

    start = time.time()
    while not wlan.isconnected():
        time.sleep(1)
        # 超过5秒,认为连接超时
        if time.time() - start > 5:
            print("connect timeout!")
            break
    # 连接成功,返回 True,打印 wlan 信息
    if wlan.isconnected():
        print('network config:', wlan.ifconfig())

        return True
    # 连接失败,返回 False
    return False


# 对 WiFi 字典进行遍历,某一个连接成功,就发送数据
def connect_wifi(wifi_dict):
    for wifi_info in wifi_dict:
        is_connected = do_connect(wifi_dict[wifi_info][0], wifi_dict[wifi_info][1])
        if is_connected:
            print("wifi-conn-success")
            break

# 发送传感器数据
def send_data():
    tempAndHumidity = getTempAndHumidity()
    sensor_data = {
        "temperature" : tempAndHumidity[0],
        "humidity" : tempAndHumidity[1]
    }
    headers = {
        "Content-Type" : "application/json"
    }
    response = urequests.post(
        web_site+test_api_url,
        data = json.dumps(sensor_data),
        headers = headers,
        json=None
    )
    print(response.text)

# 获取 DHT11 的数据,温度和湿度,以元组的形式返回
def getTempAndHumidity():
    dh.measure()
    return (dh.temperature(), dh.humidity())

def fun():
    connect_wifi(wifi_dict)
    send_data()

fun()


改进后的代码,每秒向服务器发送温度和湿度。


import network
import urequests
import time
import machine
import dht
import json

# 因为有时候带到不同的地方,学校,家里,还有公司
# 所以用一个 dict 存放所有的 WiFi 信息
wifi_dict = {
    "home": ["chenhao_jia", "chenhao123"],
    "phone": ["djhxiaomi", "0987654321"]
}

#服务
web_site="http://uuj6g3.natappfree.cc";
test_api_url = "/esp8266/get"


'''  
NodeMCU开发板Pin  ESP8266 内部 GPIO Pin 编号
D0 GPIO16
D1 GPIO5
D2 GPIO4
D3 GPIO0
D4 GPIO2
D5 GPIO14
D6 GPIO12
D7 GPIO13
D8 GPIO15
D9/RX  GPIO3
D10/TX GPIO1
D11/SD2    GPIO9
D12/SD3    GPIO10
'''

dh = dht.DHT11(machine.Pin(5))

# 对某个WiFi进行连接
def do_connect(SSID, PASSWORD):
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    print("对wifi进行连接")
    if not wlan.isconnected():
        print("connecting to " + SSID)
        wlan.connect(SSID, PASSWORD)

    start = time.time()
    while not wlan.isconnected():
        time.sleep(1)
        # 超过5秒,认为连接超时
        if time.time() - start > 5:
            print("connect timeout!")
            break
    # 连接成功,返回 True,打印 wlan 信息
    if wlan.isconnected():
        print('network config:', wlan.ifconfig())

        return True
    # 连接失败,返回 False
    return False


# 对 WiFi 字典进行遍历,某一个连接成功,就发送数据
def connect_wifi(wifi_dict):
    for wifi_info in wifi_dict:
        is_connected = do_connect(wifi_dict[wifi_info][0], wifi_dict[wifi_info][1])
        if is_connected:
            print("wifi-conn-success")
            break

# 发送传感器数据
def send_data():
    while True:
        try:
            tempAndHumidity = getTempAndHumidity()
            sensor_data = {
                "temperature" : tempAndHumidity[0],
                "humidity" : tempAndHumidity[1]
            }
            headers = {
                "Content-Type" : "application/json"
            }
            print(json.dumps(sensor_data))
              
            response = urequests.post(
                web_site+test_api_url,
                data = json.dumps(sensor_data),
                headers = headers,
                json=None
            )
            print(response.text)

            time.sleep(1)
        except  Exception as result:
            print('exception---')
            print(result)


# 获取 DHT11 的数据,温度和湿度,以元组的形式返回
def getTempAndHumidity():
    dh.measure()
    return (dh.temperature(), dh.humidity())

def main():
    connect_wifi(wifi_dict)
    send_data()

'''
我们用例子说明:
1 #module.py
2 def main():
3 print "we are in %s"%__name__
4 if __name__ == '__main__':
5 main()
这个模块定义了一个main()函数,运行的结果是打印出”we are in main“,
说明我们代码模块中的main()函数被调用执行了,
有个if这段代码,该模块可以自己执行了,并且__name__=='main'
'''
if __name__ == '__main__':
    main()


改进后的代码有一个报错,发送http请求有报错,但是不知道问题。


image.png

image.png


每次都是9个。这9个 不会请求到后台。

暂时不知道解决方法,

如果不请求后台,一直输出温度湿度 这个很正常。所以说这个代码异常,就跟 请求http有关系。

image.png





LED小灯的连接方法。


一个针脚连接D4  一个针脚连接G 接地。


代码如下“

from machine import Pin


def led():
    while True:
        #0就是D3  2是D4
        led = Pin(2, Pin.OUT)
        led.on()
        time.sleep(1)
        led.off()
        time.sleep(1)
        
        
        led灯会一闪一闪的。
# 头大的连接d4 头小的连接3v  led不能接错, led也分正负的。




联系站长

站长微信:xiaomao0055

站长QQ:14496453