模组通过以太网卡访问网络
模块通过以太网卡上外网,需要将以太网卡配置到终端模式(WAN)。比如以太网卡连接路由器,通过DHCP协议获取 IP信息,从而通过以太网卡连接外部网络,使得模块能够正常连接网络。
开发环境搭建请参考快速入门,本章节主要是对以太网卡使用介绍。
硬件准备工作
使用外挂以太网功能,需要额外准备外挂的以太网卡、网线、路由器、杜邦线。
通过杜邦线将模块与以太网卡连接,模块与网卡接线可以根据实际需求配置,具体接口配置参数请参考ethernet - 以太网相关功能章节,然后通过网线将网卡与路由器连接。
以太网芯片型号 | 以太网模块实物图 | 硬件连接实物图 | 芯片手册 | 代码示例 |
---|---|---|---|---|
W5500 | W5500模块实物图 | W5500硬件连接实物图 | W5500芯片手册 | 示例代码参考下载 |
DM9051 | DM9051模块实物图 | DM9051硬件连接实物图 | DM9051芯片手册 | 示例代码参考下载 |
CH395 | CH395模块实物图 | CH395硬件连接实物图 | CH395芯片手册 | 示例代码参考下载 |
YT8512 | YT8512模块实物图 | YT8512硬件连接实物图 | YT8512芯片手册 | 示例代码参考下载 |
- 硬件连接实物图参考使用,请根据自己实际环境进行连接配置。
- SZ18201/J1101与YT8512连接及使用方式一致,均使用 RMII 接口,此处不在列举展示。
软件准备
网卡初始化
默认以太网卡不开启,需要手动进行打开,以下是加载以太网卡的过程,通过DHCP的方式获取IP信息与外部通信。
以下示例介绍针对 W5500 以太网卡进行介绍,其他网卡在初始化时,调用该型号类即可,具体参数配置请参考 ethernet - 以太网相关功能下具体型号类。
# 首先导入ethernet包
>>> import ethernet
# 初始化网卡,配置各个参数信息,此处填写的CS脚、RST脚、INT脚均为GPIO引脚编号(GPIO引脚编号与物理引脚的映射关系请参考API参考手册内《class Pin - 控制I/O引脚》章节)
>>> eth = ethernet.W5500(b'\x12\x34\x56\x78\x9a\xbc','','','',-1,38,36,37, 0)
# 网卡注册成功后,查看默认的静态 IP 地址
>>> eth.ipconfig()
[('12-34-56-78-9A-BC', 'W5500'), (4, '192.168.1.100', '255.255.255.0 ', '192.168.1.1', '8.8.8.8', '114.114.114.114')]
# 启动以太网卡
>>> eth.set_up()
0
# 此时可以通过以太网卡对访问外部网络。
网络配置
网络配置可以通过两种方式配置,一种是通过DHCP获取动态IP地址,另一种是配置静态 IP地址。
通过DHCP获取动态IP地址
# 首先导入ethernet包
>>> import ethernet
# 初始化网卡,配置各个参数信息,此处填写的CS脚、RST脚、INT脚均为GPIO引脚编号(GPIO引脚编号与物理引脚的映射关系请参考API参考手册内《class Pin - 控制I/O引脚》章节)
>>> eth = ethernet.W5500(b'\x12\x34\x56\x78\x9a\xbc','','','',-1,38,36,37, 0)
# 网卡注册成功后,查看默认的静态IP地址
>>> eth.ipconfig()
[('12-34-56-78-9A-BC', 'W5500'), (4, '192.168.1.100', '255.255.255.0 ', '192.168.1.1', '8.8.8.8', '114.114.114.114')]
# 开启DHCP
>>> eth.dhcp()
0
# DHCP开启成功后,再次查看 IP 地址,可以发现IP地址已更新。
>>> eth.ipconfig()
[('12-34-56-78-9A-BC', 'W5500'), (4, '192.168.31.203', '255.255.255. 0', '192.168.31.1', '192.168.31.1', '0.0.0.0')]
# 启动以太网卡
>>> eth.set_up()
0
# 此时可以通过以太网对访问外部网络。
配置静态 IP地址
# 首先导入ethernet包
>>> import ethernet
# 初始化网卡,通过传参IP信息,启动时会使用IP传参而不适用默认IP信息。
>>> eth = ethernet.W5500(b'\x12\x34\x56\x78\x9a\xbc','192.168.2.10','255.255.255.0','192.168.2.1',-1,38,36,37, 0)
# 网卡注册成功后,查看默认的静态 IP 地址
>>> eth.ipconfig()
[('12-34-56-78-9A-BC', 'W5500'), (4, '192.168.2.10', '255.255.255.0 ', '192.168.1.1', '8.8.8.8', '114.114.114.114')]
# 设置静态IP
>>> eth.set_addr('192.168.3.10','255.255.255.0','192.168.3.1')
0
# 设置dns
>>> eth.set_dns('114.114.114.114','8.8.8.8')
0
# 配置完成后,再次查看 IP 地址,可以发现IP地址已更新。
>>> eth.ipconfig()
[('12-34-56-78-9A-BC', 'W5500'), (4, '192.168.3.10', '255.255.255.0', '192.168.3.1', '114.114.114.114', '8.8.8.8')]
# 启动以太网卡
>>> eth.set_up()
0
# 此时可以通过以太网对访问外部网络。
TCP(socket)应用示例
以下示例展示 TCP 通信时,通过以太网卡进行通信时的两种方法。
TCP 客户端绑定以太网卡通信
此例中模块通过以太网卡进行 TCP 通信,通过调用socket 模块内 bind 接口,指定以太网卡进行数据发送。
下例中 bind 绑定网卡接口参数 192.168.1.100 指以太网卡的IP 地址。
# 导入usocket模块
import usocket
if __name__ == '__main__':
# 创建一个socket实例
sock = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM, usocket.TCP_CUSTOMIZE_PORT)
sock.settimeout(5)
sock.bind(("192.168.1.100", 0))
# 解析域名
sockaddr=usocket.getaddrinfo('python.quectel.com', 80)[0][-1]
print('start connect')
# 建立连接
sock.connect(sockaddr)
# 向服务端发送消息
ret=sock.send('GET /NEWS HTTP/1.1\r\nHost: python.quectel.com\r\nAccept-Encoding: deflate\r\nConnection: keep-alive\r\n\r\n')
print('send %d bytes' % ret)
#接收服务端消息
data=sock.recv(1024)
print('recv %s bytes:' % len(data))
print(data.decode())
# 关闭连接
sock.close()
TCP 客户端非绑定以太网卡通信
此例中模块通过以太网卡进行 TCP 通信,不使用 socket 模块内 bind 接口,通过配置默认网卡进行 socket 通信。需要确定配置以太网卡作为默认网卡。
# 导入usocket模块
import usocket
if __name__ == '__main__':
# 创建一个socket实例
sock = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM)
sock.settimeout(5)
# 解析域名
sockaddr=usocket.getaddrinfo('python.quectel.com', 80)[0][-1]
print('start connect')
# 建立连接
sock.connect(sockaddr)
# 向服务端发送消息
ret=sock.send('GET /NEWS HTTP/1.1\r\nHost: python.quectel.com\r\nAccept-Encoding: deflate\r\nConnection: keep-alive\r\n\r\n')
print('send %d bytes' % ret)
#接收服务端消息
data=sock.recv(1024)
print('recv %s bytes:' % len(data))
print(data.decode())
# 关闭连接
sock.close()
MQTT/HTTP 等应用协议应用
使用以太网卡进行 MQTT/HTTP 应用协议通信,需要注意由于内置的 MQTT/HTTP 通信模块没有使用绑定网卡操作接口,需要配置以太网卡作为默认网卡即可。具体 MQTT/HTTP 使用,请参考QuecPython官网文档中心API参考手册下 umqtt - MQTT客户端 以及 request - HTTP客户端 章节。