使用esp32进行PC控制四位数码管,但是接收到一个数字时还可以继续接收,但是多于一位的时候就不能接收了
除了一位的接受完可以继续接收,其他的都不能继续接收
import network
import machine
import time
import socket
led1 = machine.Pin(5, machine.Pin.OUT)
led2 = machine.Pin(18, machine.Pin.OUT)
led3 = machine.Pin(19, machine.Pin.OUT)
led4 = machine.Pin(21, machine.Pin.OUT)
number_led_list = [led1, led2, led3, led4]
#led1.value(1)
#led2.value(0)
#led3.value(0)
#led4.value(0)
a = machine.Pin(13, machine.Pin.OUT)
b = machine.Pin(12, machine.Pin.OUT)
c = machine.Pin(14, machine.Pin.OUT)
d = machine.Pin(27, machine.Pin.OUT)
e = machine.Pin(26, machine.Pin.OUT)
f = machine.Pin(25, machine.Pin.OUT)
g = machine.Pin(33, machine.Pin.OUT)
h = machine.Pin(32, machine.Pin.OUT)
# 将对应的引脚对象存储到列表
led_list = [a, b, c, d, e, f, g, h]
number_dict = {
0: "11111100",
1: "01100000",
2: "11011010",
3: "11110010",
4: "01100110",
5: "10110110",
6: "10111110",
7: "11100000",
8: "11111110",
9: "11110110",
}
def do_connect():
"""
连接网络
"""
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
print('connecting to network...')
wlan.connect('-', '-')
i=1
while not wlan.isconnected():
print("正在连接···{}".format(i))
time.sleep(1)
i += 1
print('network config:', wlan.ifconfig())
print("连接成功")
def start_udp():
#启动网络功能
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp_socket.bind(("0.0.0.0", 7788))
#udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 2.2. 绑定本地信息
return udp_socket
def show_number(number):
#显示数字
if number_dict.get(number):
i = 0
for bit in number_dict.get(number):
if bit == "1":
led_list[i].value(1)
else:
led_list[i].value(0)
i += 1
def led_on(i):
#清除所有引脚,设置为灭
for led in number_led_list:
led.value(1)
number_led_list[i].value(0)
def show_1_number(num):
if 0 <= num <= 9:
#led4.value(0)
if number_dict.get(num):
led_on(3)
show_number(num)
def show_2_number(num):
if 10 <= num <= 99:
while True:
a = num // 10
led_on(2)
show_number(a)
time.sleep_ms(5)
b = num % 10
led_on(3)
show_number(b)
def show_3_number(num):
if 100 <= num <= 999:
while True:
a = num // 100
b = num // 10
c = b % 10
d = num % 10
led_on(1)
show_number(a)
time.sleep_ms(5)
led_on(2)
show_number(c)
time.sleep_ms(5)
led_on(3)
show_number(d)
time.sleep_ms(5)
def show_4_number(num):
if 1000 <= num <= 9999:
i=0
for n in "%04d" % num: #这里能够将数字1234转换为字符串“1234”
print(n)
led_on(i)
show_number(int(n))
i += 1
#time_sleep(5)
time.sleep_ms(2)
def main():
"""
主函数,不会被调用
"""
do_connect()
udp_socket = start_udp()
# 1024表示本次接收的最大字节数
led = machine.Pin(2, machine.Pin.OUT)
while True:
recv_data, sender_info = udp_socket.recvfrom(1024)
print("{}向你发送{}".format(sender_info, recv_data))
recv_data_str = recv_data.decode("utf-8")
num = int(recv_data_str)
if len(recv_data_str) == 1:
show_1_number(num)
print(num)
elif len(recv_data_str) == 2:
show_2_number(num)
print(num)
elif len(recv_data_str) == 3:
show_3_number(num)
print(num)
else:
show_4_number(num)
print(num)
if __name__ == "__main__":
main()