查看: 7937|回复: 0

python读取arduino数据并实时绘图

[复制链接]

该用户从未签到

发表于 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, 下载次数: 129)





您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

热门推荐

arduino解码sbus
arduino解码sbus
市面上有很多sbus接收机,它只有一根线就可以实现很多通道的通信,其本质利用了串口通
【干货分享】mega2560原理图PCB图纸altium designer18
【干货分享】mega2560原理
分享一下mega2560的板子 AD版本 **** 本内容被作者隐藏 **** ergo
wemos d1 wifi具体叫啥名,我也迷糊了,无法上传程序
wemos d1 wifi具体叫啥名
淘宝入手一块这样的板,详情页提供了教程,还提供了 arduino iDE 1.6.5免安装版本,
求大佬帮忙arudino上传报错programmer is not responding
求大佬帮忙arudino上传报
报错信息avrdude: stk500_recv(): programmer is not responding avrdude: stk500_get
新手求助!端口不显示的问题
新手求助!端口不显示的问
我的板子连到电脑上没有显示端口,试过安装ch340和驱动精灵都识别不出来,数据线也换
Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
快速回复 返回顶部 返回列表