更新优化ESPNOW在v1.23.0固件使用
This commit is contained in:
@@ -24,6 +24,8 @@ class DS18X20:
|
|||||||
self._ow = onewire.OneWire(Pin(pin, pull=Pin.PULL_UP))
|
self._ow = onewire.OneWire(Pin(pin, pull=Pin.PULL_UP))
|
||||||
self._buf = bytearray(9)
|
self._buf = bytearray(9)
|
||||||
self._roms = self.scan()
|
self._roms = self.scan()
|
||||||
|
if len(self._roms) == 0:
|
||||||
|
raise AttributeError("Cannot find a DS18X20")
|
||||||
|
|
||||||
def scan(self):
|
def scan(self):
|
||||||
return [rom for rom in self._ow.scan() if rom[0] in (0x10, 0x22, 0x28)]
|
return [rom for rom in self._ow.scan() if rom[0] in (0x10, 0x22, 0x28)]
|
||||||
|
|||||||
@@ -3,34 +3,38 @@ Radio-ESP-NOW
|
|||||||
|
|
||||||
Micropython library for the Radio-ESP-NOW
|
Micropython library for the Radio-ESP-NOW
|
||||||
=======================================================
|
=======================================================
|
||||||
#Preliminary composition 20220228
|
@dahanzimin From the Mixly Team
|
||||||
|
|
||||||
dahanzimin From the Mixly Team
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from esp import espnow
|
from esp import espnow
|
||||||
version = 0
|
version = 0
|
||||||
except:
|
except:
|
||||||
import espnow
|
import espnow
|
||||||
version = 1
|
version = 1
|
||||||
from ubinascii import hexlify,unhexlify
|
from ubinascii import hexlify, unhexlify
|
||||||
import network
|
import network
|
||||||
|
|
||||||
class ESPNow(espnow.ESPNow):
|
class ESPNow(espnow.ESPNow):
|
||||||
def __init__(self,channel=1,txpower=20):
|
def __init__(self, channel=1, txpower=20):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.active(True)
|
self.active(True)
|
||||||
self._channel = channel
|
self._channel = channel
|
||||||
self._txpower = txpower
|
self._txpower = txpower
|
||||||
self._nic = network.WLAN(network.AP_IF)
|
self._nic = network.WLAN(network.STA_IF) #if version else network.WLAN(network.AP_IF)
|
||||||
self._nic.active(True)
|
self._nic.active(True)
|
||||||
self._nic.config(hidden=True,channel=self._channel,txpower=self._txpower)
|
self._nic.config(channel=self._channel, txpower=self._txpower)
|
||||||
|
|
||||||
def send(self,peer,msg):
|
def encrypt(self, peer, pmk, add_peer=True):
|
||||||
|
super().set_pmk((pmk + "0" *16)[:16].encode())
|
||||||
|
if add_peer:
|
||||||
|
super().add_peer(unhexlify(peer), encrypt=True)
|
||||||
|
else:
|
||||||
|
super().del_peer(unhexlify(peer))
|
||||||
|
|
||||||
|
def send(self, peer='ffffffffffff', msg=''):
|
||||||
'''Send data after error reporting and effective processing'''
|
'''Send data after error reporting and effective processing'''
|
||||||
try:
|
try:
|
||||||
_peer=unhexlify(peer)
|
_peer = unhexlify(peer)
|
||||||
return super().send(_peer, str(msg))
|
return super().send(_peer, str(msg))
|
||||||
except OSError as err:
|
except OSError as err:
|
||||||
if len(err.args) < 2:
|
if len(err.args) < 2:
|
||||||
@@ -40,7 +44,7 @@ class ESPNow(espnow.ESPNow):
|
|||||||
elif err.args[1] == 'ESP_ERR_ESPNOW_IF':
|
elif err.args[1] == 'ESP_ERR_ESPNOW_IF':
|
||||||
self._nic.active(True)
|
self._nic.active(True)
|
||||||
elif err.args[1] == 'ESP_ERR_ESPNOW_NOT_FOUND':
|
elif err.args[1] == 'ESP_ERR_ESPNOW_NOT_FOUND':
|
||||||
self.add_peer(_peer,channel=self._channel,ifidx=network.AP_IF)
|
super().add_peer(_peer)
|
||||||
return super().send(_peer, str(msg))
|
return super().send(_peer, str(msg))
|
||||||
elif err.args[1] == 'ESP_ERR_ESPNOW_NO_MEM':
|
elif err.args[1] == 'ESP_ERR_ESPNOW_NO_MEM':
|
||||||
raise OSError("internal ESP-NOW buffers are full")
|
raise OSError("internal ESP-NOW buffers are full")
|
||||||
@@ -61,7 +65,7 @@ class ESPNow(espnow.ESPNow):
|
|||||||
self._channel = self._channel if channel is None else channel
|
self._channel = self._channel if channel is None else channel
|
||||||
self._nic.config(hidden=True, channel=self._channel, txpower=self._txpower if txpower is None else txpower)
|
self._nic.config(hidden=True, channel=self._channel, txpower=self._txpower if txpower is None else txpower)
|
||||||
|
|
||||||
def _cb_handle0(self, event_code,data):
|
def _cb_handle0(self, event_code, data):
|
||||||
'''Callback processing conversion'''
|
'''Callback processing conversion'''
|
||||||
if self._on_handle:
|
if self._on_handle:
|
||||||
if isinstance(self._on_handle, list):
|
if isinstance(self._on_handle, list):
|
||||||
@@ -113,3 +117,7 @@ class ESPNow(espnow.ESPNow):
|
|||||||
'''Get mac address'''
|
'''Get mac address'''
|
||||||
return hexlify(self._nic.config('mac')).decode()
|
return hexlify(self._nic.config('mac')).decode()
|
||||||
|
|
||||||
|
@property
|
||||||
|
def channel(self):
|
||||||
|
'''Get channel address'''
|
||||||
|
return self._nic.config('channel')
|
||||||
|
|||||||
@@ -1,94 +0,0 @@
|
|||||||
"""
|
|
||||||
Radio-ESP-NOW(ESP32-C2)
|
|
||||||
|
|
||||||
Micropython library for the Radio-ESP-NOW(ESP32-C2)
|
|
||||||
=======================================================
|
|
||||||
@dahanzimin From the Mixly Team
|
|
||||||
"""
|
|
||||||
|
|
||||||
import espnow
|
|
||||||
from ubinascii import hexlify,unhexlify
|
|
||||||
import network
|
|
||||||
|
|
||||||
class ESPNow(espnow.ESPNow):
|
|
||||||
def __init__(self,channel=1,txpower=20):
|
|
||||||
super().__init__()
|
|
||||||
self.active(True)
|
|
||||||
self._channel = channel
|
|
||||||
self._txpower = txpower
|
|
||||||
self._nic = network.WLAN(network.STA_IF)
|
|
||||||
self._nic.active(True)
|
|
||||||
self._nic.config(channel=self._channel,txpower=self._txpower)
|
|
||||||
|
|
||||||
def send(self,peer,msg):
|
|
||||||
'''Send data after error reporting and effective processing'''
|
|
||||||
try:
|
|
||||||
_peer=unhexlify(peer)
|
|
||||||
return super().send(_peer, str(msg))
|
|
||||||
except OSError as err:
|
|
||||||
if len(err.args) < 2:
|
|
||||||
raise err
|
|
||||||
if err.args[1] == 'ESP_ERR_ESPNOW_NOT_INIT':
|
|
||||||
raise OSError("Radio(ESPNOW) is not activated, unable to transmit data")
|
|
||||||
elif err.args[1] == 'ESP_ERR_ESPNOW_IF':
|
|
||||||
self._nic.active(True)
|
|
||||||
elif err.args[1] == 'ESP_ERR_ESPNOW_NOT_FOUND':
|
|
||||||
self.add_peer(_peer)
|
|
||||||
return super().send(_peer, str(msg))
|
|
||||||
elif err.args[1] == 'ESP_ERR_ESPNOW_NO_MEM':
|
|
||||||
raise OSError("internal ESP-NOW buffers are full")
|
|
||||||
elif err.args[1] == 'ESP_ERR_ESPNOW_ARG':
|
|
||||||
raise OSError("invalid argument")
|
|
||||||
else:
|
|
||||||
raise err
|
|
||||||
|
|
||||||
def recv(self):
|
|
||||||
'''Receive data'''
|
|
||||||
if self.any():
|
|
||||||
host, msg = super().recv()
|
|
||||||
return hexlify(host).decode(),msg.decode()
|
|
||||||
else :
|
|
||||||
return None,None
|
|
||||||
|
|
||||||
def set_channel(self,channel=None,txpower=None):
|
|
||||||
self._channel = self._channel if channel is None else channel
|
|
||||||
self._nic.config(channel=self._channel, txpower=self._txpower if txpower is None else txpower)
|
|
||||||
|
|
||||||
def _cb_handle(self, ee):
|
|
||||||
'''Callback processing conversion'''
|
|
||||||
host, msg = super().recv()
|
|
||||||
if self._on_handle:
|
|
||||||
if isinstance(self._on_handle, list):
|
|
||||||
for func in self._on_handle:
|
|
||||||
cmd = func.__name__.rfind('__')
|
|
||||||
if cmd != -1:
|
|
||||||
cmd=func.__name__[cmd+2:]
|
|
||||||
if cmd == str(msg.decode()):
|
|
||||||
func(hexlify(host).decode(), msg.decode())
|
|
||||||
else:
|
|
||||||
func(hexlify(host).decode(), msg.decode())
|
|
||||||
else:
|
|
||||||
self._on_handle(hexlify(host).decode(), msg.decode())
|
|
||||||
|
|
||||||
def recv_cb(self, recv_cbs):
|
|
||||||
'''Receive callback'''
|
|
||||||
self._on_handle = recv_cbs
|
|
||||||
if recv_cbs:
|
|
||||||
self.irq(self._cb_handle)
|
|
||||||
|
|
||||||
def info(self):
|
|
||||||
'''Get the paired Mac and rssi'''
|
|
||||||
_info=[]
|
|
||||||
for i in self.peers_table:
|
|
||||||
_info.append((hexlify(i).decode(),self.peers_table[i][0]))
|
|
||||||
return _info
|
|
||||||
|
|
||||||
@property
|
|
||||||
def mac(self):
|
|
||||||
'''Get mac address'''
|
|
||||||
return hexlify(self._nic.config('mac')).decode()
|
|
||||||
|
|
||||||
@property
|
|
||||||
def channel(self):
|
|
||||||
'''Get mac address'''
|
|
||||||
return self._nic.config('channel')
|
|
||||||
Reference in New Issue
Block a user