esp32开发与应用(esp和wch芯片的配合)

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所需要的特别是前面两个。所以如果有这方面的需求其实可以通过esp32wch的方式来解决。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和portu8 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(targethandle_client, args(conn, addr)) t.setDaemon(True) t.start() if __name__ __main__: main()启动server后重启板子看看是不是可以ping通板子再看看有没有数据通信。没问题的话以后其实就可以用ch32v307进行网络通信了。usb接口也是如此一个道理。