工具
工具:自己电脑双系统的ubuntu18.04,单片机esp8266,一个usb转ttl模块,ubuntu上已经下载了python的3.6和pip,还需要pip install serial
首先在windows下测试板子是否能顺利收发数据:
打开串口调试助手
这里不需要用usb转ttl插windows的usb口,直接把esp8266连安卓线插上就好
板子里的程序是发1亮灯,发0关灯,发其他的则原样返回,可见结果是对的,亮灯也如预期。
步骤
模块和单片机连接:
G-GND
5V-VIN
TXD-RX
RXD-TX
需要知识:串口通信 多线程 线程锁
打开串口权限
sudo chmod 777 /dev/ttyUSB0
注意杜邦线一定要接对,不然可能单片机没有上电都不知道
写代码:
import threading
import serial
import time
from time import sleep
from threading import Lock
from datetime import datetime
loops=[2, 4]
lock=Lock()
date_time_format='%y-%M-%d %H:%M:%S'
serial = serial.Serial('/dev/ttyUSB0', 115200, timeout=0.5)
def date_time_str(date_time):
return datetime.strftime(date_time, date_time_format)
def loop(n_loop, n_sec):
lock.acquire(blocking=True,timeout=2)
serial.write("1".encode())
sleep(n_sec)
print(f'线程({n_loop})开始执行:{date_time_str(datetime.now())},先休眠({n_sec})秒')
serial.write("0".encode())
sleep(n_sec)
lock.release()
print(f'线程({n_loop})休眠结束,结束于:{date_time_str(datetime.now())}')
def begin(n_loop,sec):
sleep(sec)
serial.write("yes".encode())
data = serial.read(20)
print(data.decode())
def print_time(threadName, delay):
serial.write("1".encode())
sleep(delay)
serial.write("0".encode())
sleep(delay)
def receive(threadName,delay):
serial.write("999".encode())
data = serial.read(20)
print('this is'+str(data))
sleep(delay)
def main():
print(f'---所有线程开始执行:{date_time_str(datetime.now())}')
threads=[]
n_loops=range(len(loops))
t=threading.Thread(target=loop, args=(1, loops[0]))
threads.append(t)
m=threading.Thread(target=begin,args=(2,loops[1]))
threads.append(m)
for i in n_loops:
threads[i].start()
for i in n_loops:
threads[i].join()
print(f'---所有线程执行结束于:{date_time_str(datetime.now())}')
if __name__ == '__main__':
main()
结果:
亮灯也成功了。
然后记录一下关于python的将字典转化为json:
import json
print(json.dumps(list('abcde')))
dict = {"time":1,"localtion":9.8}
ni = json.dumps(dict)
print(dict)
print(ni)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)