查看: 2391|回复: 0

python读取arduino数据并实时绘图

[复制链接]
  • TA的每日心情
    开心
    2018-4-20 23:15
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 2018-10-25 18:59 | 显示全部楼层 |阅读模式
    本帖最后由 11066 于 2018-10-25 19:18 编辑


    我使用arduino uno 与 ds18b20。
    python编写串口代码与数据显示


    地址
    https://blog.csdn.net/qq_39020934/article/details/83348972

    绘图使用matplotlib库
    3krna-wmclo.gif

    Arduino代码

    #include <OneWire.h>
    #include <DallasTemperature.h>
    
    // Data wire is plugged into pin 2 on the Arduino
    #define ONE_WIRE_BUS 2
    // Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
    OneWire oneWire(ONE_WIRE_BUS);
    // Pass our oneWire reference to Dallas Temperature. 
    DallasTemperature sensors(&oneWire);
    
    void setup(void)
    {
      Serial.begin(9600); //Begin serial communication
      Serial.println("Arduino Digital Temperature // Serial Monitor Version"); //Print a message
      sensors.begin();
    }
    
    void loop(void)
    { 
      // Send the command to get temperatures
      sensors.requestTemperatures();  
      Serial.print("Temperature is: ");
      Serial.println(sensors.getTempCByIndex(0)); // Why "byIndex"? You can have more than one IC on the same bus. 0 refers to the first IC on the wire
      //Update value every 1 sec.
      delay(1000);
    }


    Python代码

    import serial
    import matplotlib.pyplot as plt
    from drawnow import *
    import atexit
    import time
    
    values = []
    plt.ion()#打开交互模式
    
    
    serialArduino = serial.Serial('COM14', 9600)
    
    def plotValues():
        plt.title('Serial temperature from Arduino')
        plt.grid(True)
        plt.ylabel('temperature')
        plt.plot(values,'rx-', label='temperature')
        plt.legend(loc='upper right')
    
    def doAtExit():
        serialArduino.close()
        print("Close serial")
        print("serialArduino.isOpen() = " + str(serialArduino.isOpen()))
    
    atexit.register(doAtExit)#程序退出时,回调函数
    
    print("serialArduino.isOpen() = " + str(serialArduino.isOpen()))
    
    #预加载虚拟数据
    for i in range(0,50): 
        values.append(0)
    
        
    while True:
        while (serialArduino.inWaiting()==0):
            pass
        print("readline()")
        valueRead = serialArduino.readline(500)
    
        #检查是否可以输入有效值
        try:
            valueInInt = float(valueRead)
            print(valueInInt)
            if valueInInt <= 1024:
                if valueInInt >= 0:
                    values.append(valueInInt)
                    values.pop(0)
                    drawnow(plotValues)
                else:
                    print("Invalid! negative number")#无效  负数
            else:
                print("Invalid! too large")# 无效 超过1024
        except ValueError:
            print("Invalid! cannot cast")




    DallasTemperature.zip (29.23 KB, 下载次数: 49)
    打赏作者鼓励一下!
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    【蓝宙天枢套件评测报告之一】开箱报告
    【蓝宙天枢套件评测报告之
    蓝宙天枢套件评测报告之开箱报告 感谢蓝宙电子以及arduino.cn给我一个评测天枢套件的
    基于wifiduino和blinker的智能加湿器
    基于wifiduino和blinker的
    首先感谢奈何大神每次都会出现在我的求助帖内给予我帮助,这个项目的完工非常感谢他。
    体验OneNET4.0,一起来拼开发板
    体验OneNET4.0,一起来拼
    一、 活动时间2019年04月09日-2019年6月30日 二、活动链接1.登录Arduino中文社区账
    【Arduino】37种传感器模块系列实验(29)---实时时钟模块
    【Arduino】37种传感器模
    37款传感器模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不
    新手帮助,STM32 刷入Arduino的BootLoader。实现免串口下载
    新手帮助,STM32 刷入Ardu
    不少新人从某宝买回来十元一个的STM32C8T6的最小系统板,满网扒教程,最后搞一点点东
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表