博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【实例记录】在ubuntu上运行python实现与单片机多线程串口通信
阅读量:3903 次
发布时间:2019-05-23

本文共 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/

你可能感兴趣的文章
linux ubutun 12.04安装JDK
查看>>
linux ubutun12.04在win7上的安装出现“等待下载amd64.tar.xz”问题的解决方案
查看>>
linux:如何在Linux下统计高速网络中的流量
查看>>
linux:实用的工具.....持续更新中
查看>>
linux:关于Linux系统中 CPU Memory IO Network的性能监测
查看>>
SYN cookies机制下连接的建立
查看>>
shell脚本:test命令 if-then for while 学习笔记
查看>>
linux c编程:make Makefile工具的使用
查看>>
linux内核线程的创建与销毁
查看>>
谈谈字符编码
查看>>
linux小工具收集 持续更新中
查看>>
linux c 网络编程:用域名获取IP地址或者用IP获取域名 网络地址转换成整型 主机字符顺序与网络字节顺序的转换
查看>>
linux下查看系统资源和负载,以及性能监控
查看>>
理解Linux系统负荷
查看>>
Linux性能监控(1)
查看>>
Linux内存管理
查看>>
linux proc文件系统探索
查看>>
linux 中 man 命令的介绍
查看>>
linux ss的使用方法
查看>>
linux netlink套接字学习资料
查看>>