import usocket as socket
import struct
import binascii
import network,time
print("Connecting to WiFi", end="")
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect('Wokwi-GUEST', '')
while not sta_if.isconnected():
print(".", end="")
time.sleep(0.1)
print(" Connected!")
gc.enable()
# 3.140.118.167
import usocket as socket
import struct
import binascii
def create_coap_header(version, message_type, token_length, code, message_id):
return struct.pack('>BBH', (version << 6) | (message_type << 4) | token_length, code, message_id)
def create_coap_option(option_number, option_value):
option_delta = option_number
option_length = len(option_value)
return struct.pack('B', (option_delta << 4) | option_length) + option_value.encode()
def send_coap_message(host, port, uri_path, payload):
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_address = (host, port)
# CoAP header
version = 1
message_type = 0 # Confirmable
token_length = 0
code = 2 # POST request
message_id = 12345
header = create_coap_header(version, message_type, token_length, code, message_id)
# Empty token for simplicity
token = b''
# Constructing Options (Uri-Path)
uri_path_opt = b''
for segment in uri_path.split('/'):
if segment:
uri_path_opt += create_coap_option(11, segment)
# Payload marker (0xFF) + payload (properly formatted)
if payload:
payload_marker = b'\xFF'
payload_bytes = payload.encode('utf-8')
message = header + token + uri_path_opt + payload_marker + payload_bytes
else:
message = header + token + uri_path_opt
try:
print('Sending CoAP message to {}:{}'.format(host, port))
sent = sock.sendto(message, server_address)
print('Waiting for response...')
data, server = sock.recvfrom(4096)
print('Received response:', binascii.hexlify(data))
print(data)
finally:
sock.close()
# Replace with your Leshan server IP and port
leshan_server_ip = '3.140.118.167'
leshan_server_port = 5683
# Register the device (URI path '/rd' for registration)
# Correct payload format for LwM2M registration
payload = '</ep>;my-esp32-device<=300</lwm2m>1.0</b>U'
PAYLOAD = b'</>;rt=oma.lwm2m, </3322/0>, </7/0>, </6/0>, </5/0>, </4/0>, </3/0>, </2/7>, </2/6>, </2/5>, </2/4>, </2/3>, </2/2>, </2/1>, </2/0>, </1/0>'
# CoAP Registration Request Function
coap = CoAP()
coap.start()
# Create a POST request
request = {
'method': 'POST',
'uri': COAP_SERVER,
'payload': PAYLOAD,
'options': {
'Content-Format': 'application/link-format',
'Uri-Query': [
f'ep={NODE_NAME}',
f'lt={LIFETIME}',
'sms=null',
'lwm2m=1.0',
'b=U'
]
}
}
send_coap_message(leshan_server_ip, leshan_server_port, '/rd', payload)
'''
def send_coap_message(host, port, uri_path, payload):
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_address = (host, port)
# CoAP header
version = 1
message_type = 0 # Confirmable
token_length = 0
code = 2 # POST request
message_id = 12345
header = struct.pack('>BBH', (version << 6) | (message_type << 4) | token_length, code, message_id)
# Empty token for simplicity
token = b''
# Constructing Options (Uri-Path)
uri_path_opt = b''
for segment in uri_path.split('/'):
if segment:
uri_path_opt += struct.pack('B', (11 << 4) | len(segment)) + segment.encode()
# Payload marker (0xFF) + payload (optional)
if payload:
payload_marker = b'\xFF'
payload_bytes = payload.encode('utf-8')
message = header + token + uri_path_opt + payload_marker + payload_bytes
else:
message = header + token + uri_path_opt
try:
print('Sending CoAP message to {}:{}'.format(host, port))
sent = sock.sendto(message, server_address)
print('Waiting for response...')
data, server = sock.recvfrom(4096)
print('Received response:', binascii.hexlify(data))
print(data)
finally:
sock.close()
# Replace with your Leshan server IP and port
leshan_server_ip = '3.140.118.167'
# leshan_server_ip = 'leshan.eclipseprojects.io'
leshan_server_ip = '23.97.187.154'
leshan_server_port = 5683
# Register the device (URI path '/rd' for registration)
# send_coap_message(leshan_server_ip, leshan_server_port, '/rd', '</ep=mydevice<=300&lwm2m=1.0&b=U>')
send_coap_message(leshan_server_ip, leshan_server_port, '/rd/53/qwe', '</ep>')
'''