ESP32 wifi 串列埠轉發資料 UART micropython

Atul-8發表於2024-07-03

最近有個專案需要遠距離讀uart 串列埠列印出來的資料, 但是淘寶的除錯助手太貴了, 開源平臺找了圈也許是因為功能太簡單, 好像沒怎麼找到或者說連線配置的方式很麻煩,

所以我花了半天時間寫了一個.
如果有同樣需求的小白可以直接用這個程式跑

本方案主要是 把esp32配置成AP模式. 並且透過TCP/UDP 除錯助手連線 ESP32的 wifi, 然後輸入對應的地址和埠即可在除錯助手上顯示了.

我查到了兩個能用的:
window端:
https://gitee.com/TsingFon/NetDebugger

安卓端:

https://www.pgyer.com/FSHP

socket相關文件:
http://wiki.1zlab.deepsenserobot.com/wiki/micropython-esp32/sockets/

基於micropython 直接把下面的程式碼執行就能用其實,

ap地址會列印到視窗, 自己配置就好了.

接受資料部分邏輯我沒寫, 即註釋掉的那部分, 如果有需求的開發者可以自己基於這個檔案改就是了.

from machine import UART
import network
import socket
import time

port = 100  #埠號
wlan = None  #wlan
listenSocket = None  #套接字

# 定義UART引腳為GPIO1和GPIO3,波特率為115200
uart = UART(2, baudrate=115200,bits=8,parity=1,rx=2,tx=3,stop=1,timeout=10)
#建立WiFi
def createWifi():   
  global ap
  ap = network.WLAN(network.AP_IF)     #建立接入點介面
  ap.active(True)                      #啟用介面
  ap.config(essid='111 ', authmode=network.AUTH_WPA_WPA2_PSK, password='12345678') #設定接入點的ESSID,和WiFi 通道
#   while(ap.ifconfig()[0] == '0.0.0.0'):   #等待連線
#     time.sleep(1)
#   return True

#Catch exceptions,stop program if interrupted accidentally in the 'try'
try:
  createWifi()
  ip = ap.ifconfig()[0]   #獲取IP地址
  print(ip)
  listenSocket = socket.socket()   #建立套接字
  listenSocket.bind((ip, port))   #繫結地址和埠號
  listenSocket.listen(1)   #監聽套接字
  listenSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)   #設定套接字
  print ('tcp waiting...')

  while True:
    print("accepting.....")
    conn, addr = listenSocket.accept()   #接收連線請求,返回收發資料的套接字物件和客戶端地址
    print(addr, "connected")

    while True:
#       data = conn.recv(1024)   #接收資料(1024位元組大小)
#       if(len(data) == 0):   #判斷客戶端是否斷開連線
#         print("close socket")
#         conn.close()   #關閉套接字
#         data = uart.read()
#         break
      if uart.any():
        data = uart.read()
      print(data)
      ret = conn.send(data)   #傳送資料
except:
  if(listenSocket):   #判斷套接字是否為空
    listenSocket.close()   #關閉套接字

相關文章