505|1

21

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【得捷电子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、热点、通信都可以。

最新回复

try操作就是避免连不到wifi报错,让你可以先运行板子,再开wifi也行,什么时候开,什么时候就连上了。 这是经验之谈   详情 回复 发表于 2023-9-10 21:24
点赞 关注
 
 

回复
举报

6802

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

try操作就是避免连不到wifi报错,让你可以先运行板子,再开wifi也行,什么时候开,什么时候就连上了。

这是经验之谈

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表