【实例记录】在ubuntu上运行python实现与单片机多线程串口通信

文章目录

工具

工具:自己电脑双系统的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:      # 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 json

print(json.dumps(list('abcde')))
dict = {"time":1,"localtion":9.8}
ni = json.dumps(dict)
print(dict)
print(ni)
  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值