精华内容
下载资源
问答
  • pc端通过python与arduino实现通信

    千次阅读 2020-03-31 19:55:52
    最近想做个项目,利用python抓取网页信息数据,然后根据数据分析来控制arduino实现相应的动作操作,那么首先需要实现的是电脑端与arduino的通信。 一、软件安装 首先我们需要在电脑上安装python以及pycharm,相应的...

    最近想做个项目,利用python抓取网页信息数据,然后根据数据分析来控制arduino实现相应的动作操作,首先需要实现的是电脑端与arduino的通信。
    那么我们还是从最简单的点灯,实现电脑端与arduino的通信,控制LED灯一亮一灭。

    一、软件安装

    首先我们需要在电脑上安装python以及pycharm,相应的教程可以网上查找。
    pycharm安装可参考:https://www.51zxw.net/show.aspx?id=78219&cid=711
    在这里插入图片描述
    安装完成后,最重要的一步是需要在pycharm上配置python运行环境。
    在这里插入图片描述
    在这里插入图片描述
    找到python.exe文件。
    在这里插入图片描述

    二、模块安装

    我们运行主要是通信,需要安装serial,但是python对应的模块是pyserial。在pycharm软件File-settings中找到Project Interpreter,然后双击pip,在弹出栏里面搜索pyserial,找到后选中,点击Install package即可
    在这里插入图片描述

    三、通信测试

    相应的软件环境已经准备完成,接下来我们来写一段程序,测试下串口通信功能。
    新建一个文件,输入下面代码:如果没有相应python基础可上网自学
    主要功能:
    1、检测是否有可用端口
    2、如果有可用端口,循环发送字符o和c,间隔1秒

    # coding:utf-8
    
    import serial.tools.list_ports
    import time
    plist = list(serial.tools.list_ports.comports())
    
    if len(plist) <= 0:
            print("没有发现端口!")
    else:
            plist_0 = list(plist[0])
            serialName = plist_0[0]
            serialFd = serial.Serial(serialName, 9600, timeout=60)
            print("可用端口名>>>", serialFd.name)
    		while 1:
    		        serialFd.write("o".encode())
    		        time.sleep(1)
    		        serialFd.write("c.encode())
    		        time.sleep(1)
    

    用arduionIDE给arduino控制板上传接收程序:当收到字符o(open的缩写)LED灯亮,收到字符c(close的缩写)LED灯灭

    const int pinNumber = 11; //因为电路连接中用的是11好管脚作为输出
    
    //这里就是定义 开和关
    void setup(){  //arduino程序必须有的函数,用作初始化,设置管脚,调用库等等
        Serial.begin(9600); //这里要和树莓派中串口波特率一致
        pinMode(pinNumber,OUTPUT); //将10号管脚状态设置为输出状态
    }
    void loop() {
      char val = Serial.read();
      if(val == 'o')
      {
        digitalWrite(pinNumber,HIGH); 
        }
      if(val == 'c')
      {
        digitalWrite(pinNumber,LOW); 
        }
    }
    

    上传成功后,运行代码
    在这里插入图片描述
    然后就可以看到LED灯,一闪一闪了,现在通信部分原理跑通了,接下来就是爬取网络相应信息,做完处理后,给arduino发送控制信号即可

    更多交流可加微信
    在这里插入图片描述

    展开全文
  • python与arduino结合控制舵机

    千次阅读 多人点赞 2019-10-01 14:51:47
    python与arduino结合控制舵机 文章目录python与arduino结合控制舵机一.任务说明:二.环境说明:三实现说明:四代码说明:1. arduino代码2.python代码 一.任务说明: 我们要实现的是使用一个图像软件来控制舵机的...

    python与arduino结合控制舵机

    一.任务说明:

    我们要实现的是使用一个图像软件来控制舵机的角度,例如下图,直接使用鼠标来拖到滚动条,来实现舵机不同角度的控制。

    在这里插入图片描述

    二.环境说明:

    1. 本机系统:Ubuntu19.4

    2. python版本:3.71

    3. arduino版本:2:1.0.5

    4. 需要到的Python第三方库:

    ​ (1)tkinter:用于GUI图形界面的搭建

    ​ (2)pyserial::用于arduino与Python的串口通信

    1. 舵机:MG995

    三实现说明:

    python的tkinter库实现图形界面的搭建,用户拖动鼠标来改变转动的角度数据,通过serial库从串口通信把数据传送给arduino,然后arduino根据传过来的数据去控制舵机转动不同的角度。

    四代码说明:

    1. arduino代码

    (特别注意:舵机的控制需要的是模拟信号,所以舵机信号线所接的引脚应该是模拟输出端口)

    /*
      舵机的控制
    */
    
    //导入舵机的库
    #include <Servo.h>
    
    Servo servo_pin_1;
    
    int state=0; //初始状态
    int t=10; //延时毫秒
    void setup()
    {
      Serial.begin(9600);
      servo_pin_1.attach(1);//使用第1号引脚为信号输出
    }
    
    void loop()
    {
      while(!Serial)//检测是否有串口接通
      {} 
      if(Serial.available()>0) //判断是否具有输入
      {
        state=Serial.parseInt(); //接收数据
        servo_pin_1.write( state ); //定义舵机的转动角度
    //    delay( t );//延时1000毫秒
      }
    }
    
    

    2.python代码

    """
        python:tkinter控制舵机的角度
    
    """
    # 导入模块
    import serial
    import tkinter as tk
    import time
    
    # 建立串口连接
    ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=0.5)
    
    
    # 创建一个按钮的窗体
    class ButtonsApp(tk.Tk):
        def __init__(self):
            super().__init__()
            # 开灯按钮 resolution=50 表示步长为50
            self.scale = tk.Scale(self, from_=0,
                                  tickinterval=30,
                                  resolution=30,
                                  to=180, length=800,
                                  width=50,  orien=tk.HORIZONTAL,
                                  cursor="hand2",
                                  command=self.on)
            self.scale.pack(padx=40, pady=10)
    
        # 控制函数,特别注意event参数的使用
        def on(self, event):
            val = str(self.scale.get())
            ser.write(val.encode('utf-8'))
            print(val)
    
    
    if __name__ == '__main__':
        app = ButtonsApp()
        app.title('滚动条控制舵机')
        app.mainloop()
    
    
    

    接好各电源线之后,应该先运行arduino程序,再运行Python程序。

    展开全文
  • Python与Arduino绘制超声波雷达扫描

    千次阅读 2020-09-07 23:53:45
    在做这个案例之前先要搞明白一个问题:怎么将Arduino通过超声波检测到的距离反馈到Python端? 这个嘛,我首先想到了串行通信接口。没错!就是串口。只要Arduino将数据发送给COM口,然后Python能从COM口读取到这个...

    在这里插入图片描述

    视频连接:https://m.bilibili.com/video/BV1xf4y1X79p

    前段时间看到一位发烧友制作的超声波雷达扫描神器,用到了Arduino和Processing,可惜啊,我不会Processing更看不懂人家的程序,咋办呢?嘿嘿,所以我就换了个思路解决,因为我会一点Python啊,那就动手吧!

    在做这个案例之前先要搞明白一个问题:怎么将Arduino通过超声波检测到的距离反馈到Python端?

    这个嘛,我首先想到了串行通信接口。没错!就是串口。只要Arduino将数据发送给COM口,然后Python能从COM口读取到这个数据就可以啦!

    我先写了一个测试程序试了一下,OK!搞定,想知道咋搞定的?继续看下去,一会就告诉你

    Arduino端的程序设计

    实际上,Arduino端的程序比较简单,就是通过超声波传感器采集距离,然后将采集到的数据发送给COM口就可以了,至于触发超声波传感器并且读取数据的程序么,就不多解释了,网络那么发达,搜一搜总会有哒

    #include<Servo.h>
    #define Trig 10//引脚Tring 连接 IO D2  
    #define Echo 11 //引脚Echo 连接 IO D3
    Servo myServo; //实例化舵机对象
    float distance;
    void setup() {
      pinMode(Trig, OUTPUT);
      pinMode(Echo, INPUT);
      myServo.attach(12); //初始化舵机控制引脚
      Serial.begin(9600);
      myServo.write(15);//设定舵机的初始角度
      delay(100);
    }
    void loop() {
      for (int i = 15; i <= 165; i++) {
        myServo.write(i);
        distance = getDistance(Trig, Echo);
        if (distance > 450) //当超声波测到的距离超出范围时,设定为可检测到的最远距离
          distance = 450;
      //将数据按照一定格式发送给串口
        Serial.print('#');
        Serial.print(i);
        Serial.print('#');
        Serial.print(distance);
        Serial.println('#');
        delay(30);
      }
      for (int i = 165; i >= 15; i--) {
        myServo.write(i);
        distance = getDistance(Trig, Echo);
        if (distance > 450)
          distance = 450;
        Serial.print('#');
        Serial.print(i);
        Serial.print('#');
        Serial.print(distance);
        Serial.println('#');
        delay(30);
      }
    }
    float getDistance(int trig, int echo) {
      float temp = 0, cm = 0;
      digitalWrite(trig, LOW);   //给Trig发送一个低电平
      delayMicroseconds(2);      //等待 2微妙
      digitalWrite(trig, HIGH);  //给Trig发送一个高电平
      delayMicroseconds(10);     //等待 10微妙
      digitalWrite(trig, LOW);   //给Trig发送一个低电平
      temp = (float)(pulseIn(echo, HIGH,750000));//存储回波等待时间
      //声速是:340m/1s 换算成 34000cm / 1000000μs => 34 / 1000
      //因为发送到接收,实际是相同距离走了2回,所以要除以2
      //距离(厘米)  =  (回波时间 * (34 / 1000)) / 2
      //简化后的计算公式为 (回波时间 * 17)/ 1000
      cm = temp * 17 / 1000; //把回波时间换算成cm
      return cm;
    }
    

    Python程序设计

    最开始想用tkinter做为雷达扫描的界面(刚学的tkinter,想显摆显摆),但是做到测试界面的时候才发现,tkinter的刷新频率好低啊,只要雷达扫描三次以后,整个界面就直接卡死了,窗口都拖不动了!!!

    没办法,换一个吧,又把期待的目光投向了pygame(以前上过课,又可以显摆显摆了),这次没有铩羽而归,Pygame成功了!接下来,咱就简要说说这个程序是怎么做的,都需要哪些python库和模块吧。

    pygame库

    第一个当然是pygame的库了,还有pygame中的绘图库、字体库,这几个库主要用来设计雷达扫描界面的,比如设定窗口大小和扫描帧率、画半圆弧、绘制文字等,具体细节大家就看程序吧,我可没办法一句一句解释了。

    math库

    这个math就是数学的意思,它里面有很多与数学计算相关的方法,比如 sqrt(开根号)、log(求对数)、pow(求指数)等等,小编只用了math中的三个方法:sin(求正弦)、cos(求余弦)和pi(Π),主要是用它们来计算扫描线的角度、长度和位置。

    serial库

    这是串口库,用来设定串行通信接口、波特率以及接收数据,具体方法看下面:
    serial.Serial(Port,Baud,timeout) #打开串口
    Port:串口号,也就是COM口,字符串形式
    Baud:波特率,也就是传输速率,Arduino端和Python端要一致,小编在程序中使用的是9600
    timeout:设定超时时间
    serial.readline() #接收串口发送来的数据

    我在设计发送的数据格式的时候,故意将数据中插入了“#”,这样当python端接收到数据后可以直接转为字符串,然后利用字符串切片可以获取其中的数据,然后再转换成可用于计算的数据。

    话不多说,直接上代码。。。。。额,代码有点多,文章中先放张图吧

    在这里插入图片描述
    我已将程序上传到后台了,想要程序的童鞋,请先关注公众号哦,然后在窗口中回复“超声波雷达扫描神器”,即可获得下载链接。先到先得!你值得拥有~

    能力有限,程序中还有很多待优化的地方,感兴趣的小伙伴可以尽情优化啊,比如加个COM口的选项框等等,也希望各位增加了新功能后还可以一起分享经验哦~~

    在这里插入图片描述

    展开全文
  • 主要介绍了python Arduino串口传输数据到电脑并保存至excel表格,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
  • Python Arduino 原型 API v2 这是一个基于原始。 我开始分叉,过了一段时间,整个事情变得太不同了,无法提出拉取请求,所以我把它放在这里。 旧项目在处理通信方面有一些奇怪的事情,我依靠 parseInt() 为我完成...
  • 后续参考 import serial import sys def deleycontrol(i): i = input().strip() serialcomm.write(i.encode()) serialcomm.close() if __name__ == '__main__': ... serialcomm.timeout = 1 ...

    后续参考

    import serial
    import sys
    
    
    def deleycontrol(i):
        i = input().strip()
        serialcomm.write(i.encode())
        serialcomm.close()
    
    if __name__ == '__main__':
        serialcomm = serial.Serial('COM9', 9600)
        serialcomm.timeout = 1
        deleycontrol(sys.argv[0])
    
    String code;
    void setup(){
      Serial.begin(9600);
      pinMode(7,OUTPUT);
      }
    
    void loop(){
      if (Serial.available()>0){
        code = Serial.readStringUntil('\n');
        if (code=="0"){
          digitalWrite(7,HIGH);
          }
        if (code=="1"){
          digitalWrite(7,LOW);
          }
        }
      }
    
    展开全文
  • python-arduino-源码

    2021-03-07 04:18:46
    python-arduino 列出代码python倒入python avec le模块序列号或程序员Arduino指令python avec le模块nanpy
  • Python-Arduino-Command-API, 用于与Arduino微控制器板通信的pythonpython Arduino命令 APIpython 命令API是一个轻量级的python 库,用于 Arduino微控制器板通信通过标准的串行IO或者无线方式,通过标准串行IO...
  • 带有PythonArduino 这个项目应该为想要用Python控制Arduino的任何人提供一个简单的过程设置。 该项目提供了一个Python类,其中包含入门的有用功能。 它还包含一个可视化类,用于展示从Arduino获取的存储数据。 在...
  • 黄先生给我提供了一块arduino开发板,以及很多传感器帮助我学习,没有他,就没有今天的这篇博客. 使用arduino一般都是用它自带的开发环境IDE,好处当然是方便快捷,但是,但我在使用传感器时,如果我需要接收传感器的数据,...
  • Python读取arduino数据并实时绘图

    万次阅读 多人点赞 2018-10-24 19:13:47
    python编写串口代码数据显示 绘图使用matplotlib库 Arduino代码 DallasTemperature 下载地址 https://www.arduino.cn/thread-82352-1-1.html #include &lt;OneWire.h&gt; #include &lt;...
  • 以前开发的树莓派创意应用,基于socket实现远程图像传输和云台控制,涉及3个平台的通讯交互(RPi, Arduino, .Net)
  • python以及Arduino硬件编程笔记

    千次阅读 2019-06-11 21:35:31
    参照菜鸟教程http://www.runoob.com/python/python-tutorial.html Python官网https://www.python.org/ Python文档https://www.python.org/doc/ 廖雪峰的学习网站https://www.liaoxuefeng.com/wi...
  • 问题是这样的,我用python代码向ARDUINO中传输数据的时候,只会在最初的第一次运行时向串口传输正确的字符串“openthelight”,当while循环运行结束的时候就会出现数据刷新的情况,从代码上没看出什么毛病,求大神...
  • 利用Python实现串口通信——以Arduino UNO为例实现原理基础内容Python部分Arduino部分Arduino==>PythonPython==>Arduino应用案例 实现原理 利用Python实现串口通信本质上是利用python输出一个信号(字符串、...
  • 以下是我的代码,运行时也没有报错,但没有图形显示出来,怎么回事呢? import serial, argparse from collections import deque import matplotlib.pyplot as plt import matplotlib.animation as animation ...
  • 用电脑Python控制Arduino

    千次阅读 2019-05-29 09:24:00
    python指令: import serial #导入串口通讯库 import time ser=serial.Serial("com4",9600,timeout=1) demo1=b"0" demo2=b"1" while 1: c = input('请输入指令:') if (c == '0'): ser.write(...
  • python+arduino

    2021-03-31 11:26:42
    有没有大佬懂怎样结合Pythonarduino两个模块 两个模块分别控制相应功能,要把两个功能前后实现,通一控制。 俺是新手,求大佬解惑,感谢!</p>
  • 基于ArduinoPython的项目,将帮助我们读取传感器值并将其绘制在Python上。
  • 在本教程中,我们将学习如何在计算机上安装python以及如何将其与Arduino一起使用,它允许我们发送数据。
  • arduino有很多可以直接使用的传感器,可以很方便的获取大量的环境数据. 常见的有: 温度(室温,冰箱,水箱等场景) 湿度(房间空气湿度,花盆土壤湿度等场景) 声(声控灯,噪音检测,深海测量,医疗器械等场景) ...
  • FT232H 开始使用FT232H FTDI分支板的PythonArduino代码。 这是这些AUDIODIWHY博客文章随附的代码: //audiodiwhy.blogspot.com/2020/12/ftdi232h-breakout-board-affordable-usb.html
  • 基于PythonArduino编程语言的 开发板制作 ##介绍 OneDuino 和 OnePython 是小米生态链爱其科技推出的开源传感器创作平台,分别兼容现在主流的智能硬件:Arduino 和 Microbit ,并支持其多样的案例玩法。 为电子...
  • 前言因为Arduino具有丰富的外部接口,也拥有比较多可以直接使用的传感器,可以比较方便的获取大量环境数据,例如温度、湿度、声、光等。但这就有个问题,我要如何将arduino获取到的数据发送给树莓派进行进一步的处理...
  • 玩Docker,MQTT,Grafana,InfluxDB,PythonArduino 我必须承认,这篇文章只是Grafana和InfluxDb一起玩的借口。 InfluxDB是一个很酷的数据库,专门设计用于时间序列。 Grafana是用于时间序列分析的一种开源工具...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,212
精华内容 3,684
关键字:

python与arduino

python 订阅