开发快智能硬件开发
直播中

冰芯

8年用户 62经验值
擅长:嵌入式技术 存储技术 控制/MCU
私信 关注
[经验]

[Micropython][ ESP8266] TPYBoard V202之Network

    1.  实验目的
    1. 学习在PC机系统中网络(network)的使用方法。
    2. 学习TPYBoard V202连接网络的使用。

    2.准备工作
    (1)所需元器件
    TPYBoard V202一块
    数据线一条
    电脑 1台(本次实验以win7为例)
    (2)所需软件
    ESPlorer
    (3)下载地址:http://www.tpyboard.com/download/tool/169.html

    3.Network库的使用方法
    网络模块用于配置WiFi连接。一共两种模式,模式一,是tpyboardv202当sta节点,即连接路由器的节点。模式二,是tpyboardv202做为ap,充当路由。使用以下命令创建这些对象的实例:
    (1)当ESP8266连接到路由器时:
  1. import network
  2. wlan = network.WLAN(network.STA_IF)  # 创建一个站(当ESP8266连接到路由器时)接口
  3. wlan.active(True)                                    # 激活接口
  4. wlan.scan()                                             # 扫描接入点
  5. wlan.isconnected()                                 # 检查站点是否连接到路由器
  6. wlan.connect('essid', 'password')            # 连接到路由器
  7. wlan.config('mac')                                 # 获取接口的MAC地址
  8. wlan.ifconfig()                                       # 获取接口的IP / netmask / gw / DNS地址
   检查是否连接是否建立:
  1. wlan.isconnected()
   检查接口是否活动:
  1.     wlan.active()
   检查接口的网络设置:
  1.    wlan.ifconfig()

    在这教大家TPYBoard v202上电自动连接本地网络:
  1. from machine import Pin
  2. import network
  3. import time
  4. def led_state():
  5.     p2 = Pin(2, Pin.OUT)
  6.     p2.value(0)
  7.     time.sleep_ms(500)
  8.     p2.value(1)
  9.     time.sleep_ms(500)
  10.     p2.value(0)
  11.     time.sleep_ms(500)
  12. p2.value(1)
  13.     time.sleep_ms(500)
  14. def do_connect():
  15.     sta_if = network.WLAN(network.STA_IF)
  16.     p2 = Pin(2, Pin.OUT)
  17.     sta_if.active(False)
  18.     if not sta_if.isconnected():
  19.         p2.low()
  20.         print('connecting to network...')
  21.         sta_if.active(True)
  22.         sta_if.connect('TurnipSmart', 'turnip2016')
  23.         while not sta_if.isconnected():
  24.             pass
  25.     if sta_if.isconnected():
  26.         print('connect success')
  27.         led_state()
  28.         print('network config:', sta_if.ifconfig())
  29. do_connect()
   只需要将上面代码写入boot.py,在开发板上电后,就看到蓝灯常亮(正在连接网络),然后蓝灯交替闪烁两次,控制台打印connect success,证明已经连接到本地网络。
1.png
    (2)当其他设备连接到ESP8266时:
  1. import network
  2.     ap = network.WLAN(network.AP_IF) #创建接入点接口
  3.     ap.active(True)         # 激活接口
  4.     ap.config(essid='ESP-AP') # 设计接入点的ESSID
   (3)向指定地址发送数据的方法:
  1. def http_get(url):
  2.     _, _, host, path = url.split('/', 3)
  3.     addr = socket.getaddrinfo(host, 80)[0][-1]
  4.     s = socket.socket()
  5.     s.connect(addr)
  6.     s.send(bytes('GET /%s HTTP/1.0rnHost: %srnrn' % (path, host), 'utf8'))
  7.     while True:
  8.         data = s.recv(100)
  9.         if data:
  10.             print(str(data, 'utf8'), end='')
  11.         else:
  12.             break
  13.     s.close()

    4.实验一
    (1)实验要求
    当TPYBoard v202未连接到网络时,led亮起警示,当连接成功后,熄灭。
    (2)main.py程序代码
  1. import network
  2. from machine import Pin
  3. sta_if = network.WLAN(network.STA_IF)
  4. p2 = Pin(2, Pin.OUT)
  5. #我们在这里把接入点接口禁用,方便观看实验效果,非实验可以去掉
  6. sta_if.active(False)
  7. if not sta_if.isconnected():
  8.     p2.low()
  9.     print('connecting to network...')
  10.     sta_if.active(True)
  11.     sta_if.connect('TurnipSmart', 'turnip2016')
  12.     while not sta_if.isconnected():
  13.         pass
  14. if sta_if.isconnected():
  15.     print('connect success')
  16.     p2.high()
  17.     print('network config:', sta_if.ifconfig())
   (3)实验效果
    当我们复位,把程序写进去的时候会看到TPYBoard V202板载的蓝灯亮起来,当连接成功后蓝灯熄灭,控制台打印connect success。
    实验二
    (1)实验要求
    当TPYBoard v202连接网络成功后,通过get方式向网址
    http://www.tpyboard.com/esp8266/test.php?val=A
    发送字符A,网站接到后,页面显示begin,并返回bigin,TPYBoard V202收到bigin,LED
    快闪2次。
    (2)main.py程序代码
  1. import network
  2. from machine import Pin
  3. import socket
  4. import urllib
  5. import time

  6. def led_state():
  7.     p2 = Pin(2, Pin.OUT)
  8.     p2.value(0)
  9.     time.sleep_ms(500)
  10.     p2.value(1)
  11.     time.sleep_ms(500)
  12.     p2.value(0)
  13.     time.sleep_ms(500)
  14.     p2.value(1)

  15. def do_connect():
  16.     sta_if = network.WLAN(network.STA_IF)
  17.     p2 = Pin(2, Pin.OUT)
  18.     sta_if.active(False)
  19.     if not sta_if.isconnected():
  20.         p2.low()
  21.         print('connecting to network...')
  22.         sta_if.active(True)
  23.         sta_if.connect('TurnipSmart', 'turnip2016')
  24.         while not sta_if.isconnected():
  25.             pass
  26.     if sta_if.isconnected():
  27.         print('connect success')
  28.         p2.high()
  29.         print('network config:', sta_if.ifconfig())

  30. def http_get(url):
  31.     _, _, host, path = url.split('/', 3)
  32.     addr = socket.getaddrinfo(host, 80)[0][-1]
  33.     s = socket.socket()
  34.     s.connect(addr)
  35.     s.send(bytes('GET /%s HTTP/1.0rnHost: %srnrn' % (path, host), 'utf8'))
  36.     while True:
  37.         data = s.recv(50)
  38.         if data:
  39.             recive=str(data, 'utf8')
  40.             #print('recive:',recive)
  41.             print(str(data, 'utf8'), end='')
  42.             if(recive.find('begin')>-1):
  43.                led_state()
  44.         else:
  45.             break
  46.     s.close()
  47. do_connect()
  48. http_get('http://www.tpyboard.com/esp8266/test.php?val=A')
   (3)实验效果
2.png
    当点击Send to ESP时,控制台显示从页面上传过来的内容为begin,并且led灯交替闪烁两次。
    当访问的网址http://www.tpyboard.com/esp8266/test.php?val=X后面参数不是A的时候,
3.png
    页面会提示 This is not ‘A’。

更多回帖

发帖
×
20
完善资料,
赚取积分