arduino与python 通信

//这里我不知道为什么python写个数 发过来会变成0
//其中   int a=Serial.read(); 当python不发送数据时候   会读出来-1   当发送数据会读出0  
//根据这两个区别来实现判断
void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
}

void loop() {
int a=Serial.read();
 
  if(a==-1){
  Serial.print(-1);  
  Serial.println("loop is runing");
  delay(1000);  }   

  else
  Serial.println(0);
  delay(1000);     
}

python代码

 ser.write(1)

整体的在这里

from tkinter import *
from tkinter import ttk
import threading
import serial
import serial.tools.list_ports
import inspect
import sys
import os
import time



global serial_com
global ser
port_serial = " "
bitrate_serial = " "

"""
串口数据接受线程
"""


def thread_recv():
    global ser
    global text1
    while True:
        read = ser.readall()
        if len(read) > 0:
            print(__file__, sys._getframe().f_lineno, "<--", bytes(read).decode('ascii'))
            text1.insert(END, bytes(read).decode('ascii'))
            os.system("adb shell input swipe 250 1000 850 1000 200")
            ser.write(1)
"""
串口打开关闭函数
"""


def usart_ctrl(var, port_, bitrate_):
    global ser
    print(__file__, sys._getframe().f_lineno, port_, bitrate_, var.get())

    if var.get() == "打开串口":

        var.set("关闭串口")
        ser = serial.Serial(
            port=port_,
            baudrate=int(bitrate_),
            parity=serial.PARITY_NONE,
            timeout=0.2,
            stopbits=serial.STOPBITS_ONE,
            bytesize=serial.EIGHTBITS)

        # ser.open()

        recv_data = threading.Thread(target=thread_recv)
        recv_data.start()



    else:
        var.set("打开串口")
        ser.close()


"""
串口发送函数
"""


def usart_sent(var):
    print(__file__, sys._getframe().f_lineno, "-->", var)
    x = ser.isOpen()
    if x == True:
        ser.write(var.encode("utf-8"))
    # print("-->",writedata)


"""
串口号改变回掉函数
"""


def combo1_handler(var):
    port_serial = var
    print(__file__, sys._getframe().f_lineno, var, port_serial)


"""
串口波特率改变回掉函数
"""


def combo2_handler(var):
    bitrate_serial = var
    print(__file__, sys._getframe().f_lineno, var, bitrate_serial)


def main():
    init_window = Tk()
    init_window.title('串口调试助手')
    # init_window.geometry("800x600")

    frame_root = Frame(init_window)
    frame_left = Frame(frame_root)
    frame_right = Frame(frame_root)

    pw1 = PanedWindow(frame_left, orient=VERTICAL)
    pw2 = PanedWindow(frame_left, orient=VERTICAL)
    pw3 = PanedWindow(frame_left, orient=VERTICAL)

    frame1 = LabelFrame(pw1, text="串口设置")
    frame2 = Frame(frame_left)
    frame3 = LabelFrame(pw2, text="接收设置")
    frame4 = LabelFrame(pw3, text="发送设置")

    pw1.add(frame1)
    pw1.pack(side=TOP)
    frame2.pack(side=TOP)
    pw2.add(frame3)
    pw2.pack(side=TOP)
    pw3.add(frame4)
    pw3.pack()
    frame5 = Frame(frame_right)
    frame5.pack(side=TOP)
    frame6 = Frame(frame_right)
    frame6.pack(side=LEFT)

    global text1
    text1 = Text(frame5, width=100, height=30)
    text1.grid(column=0, row=0)
    text2 = Text(frame6, height=10)
    text2.grid(column=0, row=0)

    button2 = Button(frame6, text="发送", width=14, height=1)
    button2.bind("<Button-1>", lambda event: usart_sent(var=text2.get("0.0", "end")))
    button2.grid(column=1, row=0)

    label1 = Label(frame1, text="串口号", height=2)
    label1.grid(column=0, row=0)
    label2 = Label(frame1, text="波特率", height=2)
    label2.grid(column=0, row=1)
    label3 = Label(frame1, text="数据位", height=2)
    label3.grid(column=0, row=2)
    label4 = Label(frame1, text="校验位", height=2)
    label4.grid(column=0, row=3)
    label5 = Label(frame1, text="停止位", height=2)
    label5.grid(column=0, row=4)

    port_list = list(serial.tools.list_ports.comports())
    print(len(port_list))#输出串口号
    for i in range(0,len(port_list)):
        print(port_list[i])  # 输出串口号

    portcnt = 0;
    portcnt = len(port_list)
    serial_com = []

    varPort = StringVar()
    combo1 = ttk.Combobox(frame1, textvariable=varPort, width=8, height=5, justify=CENTER)
    for m in range(portcnt):
        port_list_1 = list(port_list[m])
        serial_com.append(port_list_1[0])

    serial_com.append("COM0")
    combo1['values'] = serial_com
    print(__file__, sys._getframe().f_lineno, m, serial_com)

    combo1.bind("<<ComboboxSelected>>", lambda event: combo1_handler(var=varPort.get()))
    combo1.current(0)
    combo1.grid(column=1, row=0)
    varBitrate = StringVar()
    combo2 = ttk.Combobox(frame1, textvariable=varBitrate, width=8, height=2, justify=CENTER)
    combo2['values'] = ("115200",  "9600","19200", "38400")
    combo2.bind("<<ComboboxSelected>>", lambda event: combo2_handler(var=varBitrate.get()))
    combo2.current(0)
    combo2.grid(column=1, row=1)
    combo3 = ttk.Combobox(frame1, width=8, height=2, justify=CENTER)
    combo3['values'] = ("5 bit", "6 bit", "7 bit", "8 bit")
    combo3.current(3)
    combo3.grid(column=1, row=2)
    combo4 = ttk.Combobox(frame1, width=8, height=2, justify=CENTER)
    combo4['values'] = ("NONE", "ODD", "EVEN", "MARK", "SPACE")
    combo4.current(0)
    combo4.grid(column=1, row=3)
    combo5 = ttk.Combobox(frame1, width=8, height=2, justify=CENTER)
    combo5['values'] = ("1 bit", "1.5 bit", "2 bit")
    combo5.current(0)
    combo5.grid(column=1, row=4)

    var1 = StringVar()
    var1.set("打开串口")
    button1 = Button(frame2, textvariable=var1, width=18, height=1)
    button1.bind("<Button-1>", lambda event: usart_ctrl(var=var1, port_=combo1.get(), bitrate_=combo2.get()))
    button1.grid(column=0, row=0)

    """
    接受设置
    """

    """
    发送设置
    """

    w = ttk.Label()

    w.pack()


    frame_left.pack(side=LEFT)
    frame_right.pack(side=RIGHT)
    frame_root.pack()
    init_window.mainloop()


if __name__ == "__main__":
    main()
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值