Thonny部分
import socket
import _thread
from machine import SoftI2C, Pin
def connect_wifi():
import network
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
print(wlan.isconnected())
if not wlan.isconnected():
print('connecting to network...')
wlan.connect('tom', '88888888')
while not wlan.isconnected():
pass
print('网络配置:', wlan.ifconfig())
def create_udp_socket():
udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM,0)
local_addr = ('', 7788)
udp_socket.bind(local_addr)
return udp_socket
def recv_udp_cmd(*args, **kwargs):
i2c = SoftI2C(sda=Pin(14),scl=Pin(15),freq=100000)
devices = i2c.scan()
print(devices)
try:
while True:
recv_data, sender_info = udp_socket.recvfrom(1024)
print(recv_data)
for device in devices:
i2c.writeto(device, recv_data)
except Exception as ret:
print("接收命令的线程结束...", ret)
def sendmessage(url,port):
import time
try:
while True:
udp_socket.sendto("hello".encode(), (url, port))
print("发送测试数据hello给上位机")
time.sleep_ms(1000)
except Exception as ret:
print("异常:", ret)
if __name__ == "__main__":
connect_wifi()
udp_socket = create_udp_socket()
thread_1 = _thread.start_new_thread(recv_udp_cmd, (None,))
sendmessage("192.168.0.164", 9090)
本地服务器部分用于转发消息
from flask import Flask, request
import socket
app = Flask(__name__)
UDP_SERVER_IP = '192.168.0.195'
UDP_SERVER_PORT = 7788
@app.route('/sendudp', methods=['POST'])
def handle_send_data():
data = request.form['data']
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM,0)
udp_socket.sendto(data.encode(), (UDP_SERVER_IP, UDP_SERVER_PORT))
udp_socket.close()
return 'Data forwarded to UDP server successfully'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
html前端部分
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Send Data Example</title>
<style>
button {
width: 100px;
height: 100px;
font-size: 20px;
margin: 10px;
}
</style>
</head>
<body>
<div>
<button id="moveUp">前进</button>
<button id="moveDown">后退</button> <br>
<button id="moveLeft">左移</button>
<button id="moveRight">右移</button> <br>
<button id="turnLeft">左转</button>
<button id="turnRight">右转</button> <br>
<button id="stop">停止</button>
</div>
<script>
function sendData(data) {
var xhr = new XMLHttpRequest();
var url = "http://192.168.0.164:5000/sendudp";
xhr.open("POST", url, true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send("data=" + encodeURIComponent(data));
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
alert("Data sent via UDP");
}
};
}
sendData("\x00");
['moveUp', 'moveDown', 'moveLeft', 'moveRight', 'turnLeft', 'turnRight','stop'].forEach(function(id) {
const button = document.getElementById(id);
console.log('12323')
button.addEventListener('click', function() {
const commandMap = {
'moveUp': '\xaa',
'moveDown': '\x55',
'moveLeft': '\x66',
'moveRight':'\x99',
'turnLeft': '\x82',
'turnRight': '\x28',
'stop': '\x00',
};
sendData(commandMap[id]);
});
});
</script>
</body>
</html>