K210入門,用wifi通訊

2021-10-10 11:12:23 字數 4164 閱讀 2996

本人使用的是maix dock,不同開發板自行進行微調

maixdock包裝盒內附贈一條wifi天線,將其安裝到k210核心板上然後開始編寫**

from fpioa_manager import

*from fpioa_manager import fm

import network, socket, time

from machine import uart

from maix import gpio

from board import board_info

首先先導入相關函式的模組

然後進行esp8285(k210上的網絡卡模組)的初始化,首先進行引腳的功能對映。

# en esp8285

fm.register(

8, fm.fpioa.gpiohs0, force=

true

)#pin:功能對映腳、function:晶元功能、force:強制分配,如果為true,則可以多次對同乙個引腳註冊;false則不允許同一引腳多次註冊

wifi_en=gpio(gpio.gpiohs0,gpio.out)

#id:使用的gpio引腳,mode:gpio模式

fm.register(board_info.wifi_rx,fm.fpioa.uart2_tx, force=

true

)fm.register(board_info.wifi_tx,fm.fpioa.uart2_rx, force=

true

)

然後進行wifi初始化函式的編寫,將剛剛設定的wifi_en設定為全域性變數。(這裡注意一下wifi_en.value()函式的使用方法,建議查詢官方文件)

def

wifi_enable

(en)

:global wifi_en #把gpio的引腳狀態設為全域性變數

wifi_en.value(en)

#如果en有值則修改 gpio 的引腳狀態

#如果en無值則讀取 gpio 的引腳狀態

隨後進行wifi連線函式的編寫(該函式用於wifi連線,如果k210沒有連線上指定的熱點那麼就會重複呼叫該函式)

def

wifi_reset()

:global uart

wifi_enable(0)

time.sleep_ms(

200)

#延時200 ms

wifi_enable(1)

#使能wifi

time.sleep(2)

#延時2 s

uart = uart(uart.uart2,

115200

,timeout=

1000

, read_buf_len=

4096

)#uart:uart 號,使用指定的 uart

#baudrate:uart 波特率

#timeout: 串列埠接收超時時間

#read_buf_len: 串列埠接收緩衝,串列埠通過中斷來接收資料,如果緩衝滿了,將自動停止資料接收

tmp = uart.read(

)#讀取串列埠緩衝中的資料到 tmp 中

uart.write(

"at+uart_cur=921600,8,1,0,0\r\n"

)#傳送資料

print

(uart.read())

#列印串列埠讀取的資料

uart = uart(uart.uart2,

921600

,timeout=

1000

, read_buf_len=

4096

) uart.write(

"at\r\n"

) tmp = uart.read(

)print

(tmp)

ifnot tmp.endswith(

"ok\r\n"):

#檢查tmp是否以 ok\r\n 結尾,是的話就返回true

print

("reset fail"

)return

none

try:

nic = network.esp8285(uart)

#嘗試初始化esp8285如果失敗就跳到下列的 except 語句中

except exception:

return

none

return nic

這裡tmp.endswith(「ok\r\n」)函式是檢查tmp是否以ok\r\n 結尾,如果是的話那就返回true如果沒有連線成功就會返回reset fail

然後就進入while迴圈函式中,該函式用來傳送和接受以及初始化函式的呼叫。首先是進行判斷,判斷wifi是否連線如果沒有連線那麼就重新使能,如果使能成功就賦予nic = true。然後會嘗試連線wifi,進行查詢wifi資訊操作,如果失敗了就會重新進行下一輪連線。

初始化成功和連線成功後首先會呼叫socket()使用給定的位址系列,套接字型別和協議號建立乙個新套接字。然後嘗試連線wifi熱點如果失敗了那麼會printf錯誤資訊。

addr =

(server_ip, server_port)

#把server的ip和密碼存到port裡面

nic =

none

#清空 nic 內值

while

true:if

not nic or

not nic.isconnected():

nic = wifi_reset(

)#如果wifi沒有連線就重新使能,如果使能成功會將nic賦值true

ifnot nic:

#使能失敗

print

("wifi 重置失敗"

)continue

#進行下一輪使能

try:

nic.connect(wifi_ap_ssid, wifi_ap_passwd)

#嘗試連線wifi

nic.ifconfig(

)#檢視wifi連線資訊

except exception:

continue

#連線失敗進行下一輪連線

ifnot nic.isconnected():

print

("wifi 連線失敗"

)continue

# send byte

sock = socket.socket(

)#使用給定的位址系列,套接字型別和協議號建立乙個新套接字

try:

sock.connect(addr)

#嘗試連線wifi熱點

except exception as e:

#返回錯誤資訊

print

("連線失敗:"

, e)

sock.close(

)continue

sock.settimeout(5)

count =

0 err =

0while

true

: clock.tick(

)if err >=10:

#如果err大於

print

("socket broken"

)break

##############以下為修改區域##################

try:

send_len = sock.send(

"picture is raccoon\n"

)except exception:

#傳送失敗,err自增一

print

("傳送失敗"

) time.sleep(2)

err +=

1continue

count +=

1#傳送成功次數加1

print

("已傳送的次數"

, count)

##############以上為修改區域##################

sock.close(

)

想要進行修改,例如用模型識別 到了就讓wifi返回1給電腦熱點,則在#####區域中修改。

k210微控制器初學

我這塊開發板用的是亞博科技的,k210總的來說效能很強大,具體看資料手冊。入門主要先學習fpioa引腳對映和gpio的輸入輸出。gpio 對應的標頭檔案 gpio.h 通用 gpio 共 8 個,使用同乙個中斷源,可配置輸入輸出訊號,可配置觸發 io 口總中斷,邊沿觸發和電平觸發。每隔 io 可以分...

基於堪智k210的4G AIOT智慧型終端設計

from fpioa manager import fm from machine import uart fm.register 21,fm.fpioa.uart1 tx,force true fm.register 22,fm.fpioa.uart1 rx,force true fm.regis...

勘智K210 KPU特性及約束

勘智k210是嘉楠科技自主研發的一款邊緣側ai晶元,基於risc v架構,內建卷積神經網路加速器kpu。kpu可以實現人臉檢測 人臉識別 影象識別 影象分類等機器視覺任務,其特性和約束條件如下,有興趣的開發者可以嘗試。網路輸入或者中間的feature map尺寸不大於320 256,不小於4x4。與...