本文共 2073 字,大约阅读时间需要 6 分钟。
工具:自己电脑双系统的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 threadingimport serialimport timefrom time import sleepfrom threading import Lockfrom datetime import datetimeloops=[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: # start threads threads[i].start() for i in n_loops: # wait for all threads[i].join() # threads to finish print(f'---所有线程执行结束于:{date_time_str(datetime.now())}')if __name__ == '__main__': main()
结果:
亮灯也成功了。
然后记录一下关于python的将字典转化为json:
import jsonprint(json.dumps(list('abcde')))dict = { "time":1,"localtion":9.8}ni = json.dumps(dict)print(dict)print(ni)
转载地址:http://bxten.baihongyu.com/