esp32开发与应用(esp和wch芯片的配合)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
前面我们写过,esp32可以通过spi的方式,和w5500模块进行通信。但是这样的话,其实浪费了一个spi口,有一点可惜。不仅如此,如果esp32需要通过usb和pc沟通的话,还需要esp32-s3新品,这样其实也不是很方便。这个时候就想,是不是可以通过esp32外扩一个芯片的方式,来解决usb通信、网络互联、蓝牙的问题。这个时候就想到了wch芯片。

1、部分esp芯片不带蓝牙
比如8266,就不带蓝牙功能。但是就目前场景来说,很多都是有蓝牙需求的。
2、wch支持usb、有线网口和蓝牙
wch本身就是专注在连接器方向,usb、网口和蓝牙这些部分都是esp所需要的,特别是前面两个。所以如果有这方面的需求,其实可以通过esp32+wch的方式来解决。
3、wch价格不贵
这一点非常重要。很多时候,如果一个芯片不错,但是价格不厚道,这种情况其实不适合大规模商用。但是性价比高的话,就可以去试一试。
4、wch开发不难
大部分wch都是依赖于riscv处理器,开发的ide不是keil,而是mounriver。但实际代码结构和使用体验几乎和keil一模一样,非常方便。烧录的时候,也需要一个烧录器,一般称之为wch-link,当然也可以用来调试,和swd接口非常类似。有了mounriver和烧录器,基本就可以进行wch开发了,不复杂。
5、推荐一个wch的mcu
个人用的比较多的mcu,还是偏向于usb和网口的,比如ch32v307系列,就具有这方面的优势。搭建好开发环境,购买wch-link,同时采购一两个开发板。这样就可以进行wch的开发流程了。
6、网络部分代码是闭源的
之前谈到的ch32v307内部,内部集成了eth phy,但是这部分都是闭源的。我们看不到里面的代码,只看到头文件和.a文件,但不妨碍我们使用。而且,本身厂家提供了很多的demo code,稍微改改就可以用起来。
7、tcp server的demo
厂家有一个tcp client的demo,可以找到后,修改下demo,即修改下ip和port,
u8 MACAddr[6]; //MAC address
u8 IPAddr[4] = {192, 168, 0, 10}; //IP address
u8 GWIPAddr[4] = {192, 168, 0, 1}; //Gateway IP address
u8 IPMask[4] = {255, 255, 255, 0}; //subnet mask
u8 DESIP[4] = {192, 168, 0, 240}; //destination IP address
u16 desport = 10000; //destination port
u16 srcport = 10000; //source port
编译烧录后,可以pc端也用python写一个server,如下所示。如果觉得麻烦,用ai写也可以,写完就可以launch一下。这个case需要server先发送,写的时候注意下即可。
# -*- coding: utf-8 -*-
import socket
import threading
HOST = "0.0.0.0"
PORT = 10000
cnt = 0;
def handle_client(conn, addr):
global cnt
print "[NEW CONNECT]", addr
try:
while True:
cnt += 1
reply = "ACK: " + str(cnt)
conn.sendall(reply)
data = conn.recv(1024)
if not data:
print "[DISCONNECT]", addr
break
# Python2: data already str (bytes)
print "[RX %s]" % (addr,), data
except Exception as e:
print "[ERROR %s]" % (addr,), e
finally:
conn.close()
def main():
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server.bind((HOST, PORT))
server.listen(5)
print "TCP Server running on %s:%d" % (HOST, PORT)
while True:
conn, addr = server.accept()
t = threading.Thread(target=handle_client, args=(conn, addr))
t.setDaemon(True)
t.start()
if __name__ == "__main__":
main()
启动server后,重启板子,看看是不是可以ping通板子,再看看有没有数据通信。没问题的话,以后其实就可以用ch32v307进行网络通信了。usb接口也是如此,一个道理。
更多推荐

所有评论(0)