【得捷电子Follow me第2期】任务2:网络功能使用
[复制链接]
任务2:完成网络功能的使用,能够创建热点和连接到WiFi
1连接WiFi:
使用circuitpython连接wifi是很方便的。主要就是import wifi库
我是用的电脑开热点,板子连接电脑热点。其实就是语句wifi.radio.connect()
里面的os.getenv其实是打开
文件,
读取WIFI_SSID和WIFI_PASSWORD的字符串,也就是你的wifi名称和密码,当然你也可以不用os.getenv操作,直接
wifi.radio.connect(‘你的WiFi名称’,'你的WiFi密码') 就可以了
至于try操作就是避免连不到wifi报错,让你可以先运行板子,再开wifi也行,什么时候开,什么时候就连上了。
代码:
import wifi
import os
while True:
try:
wifi.radio.connect(os.getenv("WIFI_SSID"), os.getenv("WIFI_PASSWORD"))
break
except:
print('正在尝试连接WIFI')
print(f"My IP address: {wifi.radio.ipv4_address}")
可以在电脑热点界面看到IP地址。
2创造热点:
直接wifi.radio.start_ap("WiFi名称", "密码")就可以了。
电脑找到了wifi,连接好像有点久。
import wifi
wifi.radio.start_ap("坏也的ESP32s3", "huai66666")
另外我还试了tcp协议通信实验,即电脑开热点是server,板子连接电脑热点是client,然后发送消息。
这里我就演示一下效果吧,原理我自己理解的也比较浅,也讲不好。由于我使用网络调试助手创建tcp服务器,esp32一直连接不上,我就直接用python自己写了,也比较简单就一点点代码。
功能就是,服务器发送消息给esp32,esp32在终端打印出来,并把相同的内容发送回去,服务器也打印出来,测试两端的收发功能。
QQ录屏20230909161256
运行代码主要检查自己电脑的ip地址,不一样的话记得改。
服务器代码:
#!/usr/bin/python3
# 文件名:server.py
# 导入 socket、sys 模块
import socket
import sys
import time
# 创建 socket 对象
serversocket = socket.socket(
socket.AF_INET, socket.SOCK_STREAM)
# 获取本地主机名
host = socket.gethostname()
port = 9999
# 绑定端口号
serversocket.bind(('192.168.1.103', port))
# 设置最大连接数,超过后排队
serversocket.listen(5)
# 建立客户端连接
print('\n'+'{:-^30}'.format('等待客户连接'))
clientsocket,addr = serversocket.accept()
print("连接地址: %s" % str(addr))
print(clientsocket.recv(1024))
msg='HELLO WORLD!\r\n'
# clientsocket.send(msg.encode('utf-8'))
while True:
# clientsocket,addr = serversocket.accept()
# print("连接地址: %s" % str(addr))
print('{:*^20}'.format('请输入信息'))
msg = input()
clientsocket.send(msg.encode('utf-8'))
time.sleep(0.5) #等对面发回来
msg_back = clientsocket.recv(1024)
# while msg_back == 0:
# msg_back = clientsocket.recv(1024)
print(msg_back)
clientsocket.close()
esp32代码:
import wifi, os, time
#连接wifi
while True:
try:
wifi.radio.connect(os.getenv("WIFI_SSID"), os.getenv("WIFI_PASSWORD"))
break
except:
print('正在尝试连接WIFI')
print(f"My IP address: {wifi.radio.ipv4_address}")
import socketpool
import time
HOST = "192.168.1.103" #服务器ip地址和端口
PORT = 9999
TIMEOUT = 30
pool = socketpool.SocketPool(wifi.radio) #创建socket套接字
print("Creating Socket")
while True:
try:
sock=pool.socket(pool.AF_INET, pool.SOCK_STREAM)
sock.settimeout(TIMEOUT)
sock.connect((HOST, PORT))
print('已连接上服务端')
break
except:
print('请检查TCP服务器,尝试重新连接')
sock.send(b'Client is ok!')
while True:
buff = bytearray(15)
numbytes = sock.recv_into(buff)
if(numbytes >= 0): #如果收到信息就打印出来
print(buff)
sent = sock.send(bytearray('client has recieve message:')) #发送消息回服务器
sent = sock.send(buff)
到此网络实验部分就结束了,wifi、热点、通信都可以。
|