Raspberry pi不会使用minicom或python将串行数据发送到arduino

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Raspberry pi不会使用minicom或python将串行数据发送到arduino相关的知识,希望对你有一定的参考价值。

我正在尝试使用tx / rx引脚使用raspberry pi与arduino进行通信。我有arduino编程发送回收到的字母的ASCII码。

码:

byte number = 0;

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  if (Serial.available())  
  {
    number = Serial.read();
    Serial.print("character recieved: ");
    Serial.println(number, DEC);
  }
}

但是当我打开minicom并输入它时,没有任何反应。如果我打开arduino的串口监视器并发送一个字符minicom显示“字符收到:”和字符ASCII码。我尝试使用py serial创建一个python程序,

码:

import serial
ser = serial.Serial('/dev/ttyAMA0', 9600, timeout=1)
ser.open()

ser.write("testing")
try:
        while 1:
                response = ser.readline()
                print response
except KeyboardInterrupt:
        ser.close()

但没有显示任何内容。我已经浏览了整个互联网,但我找不到任何解决方案。请提前帮助,谢谢。

答案

首先,ser.readline在返回任何内容之前查找 r n,因此发送单个字节只会进入缓冲区。

因此,您希望始终将ser.println用于该行的最后部分。 Pi和Arduino的效果相同。

此外,在Minicom中,您希望在每行后按Enter键,因此ser.readline()将返回该行。

..

您不需要做任何奇怪的事情来使串口工作。但是,我使用实际的USB连接器而不是直接连接到TX / RX线。实际上,我使用的电缆与用于从PC编程的电缆相同。

我将Rpi用作Arduino程序员并处理从模拟读数发回的结果。

读取序列的Rpi python程序需要在从IDE上传到Arduino时停止,但这是唯一真正的考虑因素。没有两个程序可以同时获取USB端口。

在Rpi方面,我最初使用过

ls /dev/ttyUSB*

找到它正在使用的端口。我甚至拔掉了电缆,然后再次执行该命令,它就消失了。将其重新插入,然后又回来了。它非常可靠(与插入USB存储器相反)。

在Arduino方面,它总是与您在程序中已有的相同的连续内容。

你使用minicom进行测试是正确的。

要找到shebang中使用的字符串,我使用了这个:

which python

这就是我在Rpi3上使用的内容:

#!/usr/bin/python
import serial
from datetime import datetime
tab = "	"
ser = serial.Serial("/dev/ttyUSB0",9600)

while True :
    linein = ser.readline()
    if len(linein)<10 : continue
    print "/dev/ttyUSB0 input -->  " + repr(linein)
    date   = str(datetime.now().date())
    date   = date[:10]            
    time   = str(datetime.now().time())
    time   = time[:8]
    outline = date + tab + time + tab + linein
    if not outline.endswith("Inverter
") :
        f = open("htv.dat","a")
        f.write(outline)
        f.close()
        print "htv.dat ----> " + repr(outline)
        print "htv.dat ----> " + outline
    else: print

为了使其可执行,我这样做:

cp ss.py ssx
chmod +x ssx
sudo cp ssx /usr/sbin

这是我在Nano上使用的代码:

// HTV - Humidity, Temperature, Voltage          2/4/17
//
//  Voltage measurement variables for the voltage divider    A2
float R1 = 1000000.0; 
float R2 =  147000.0; 
float constADC=4.59;   

//  Humidity/temp readings     D2
#include <Adafruit_Sensor.h>
#include "DHT.h"
#define DHTPIN 2    
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600); 
  dht.begin();
  }

void loop() { 
  int value=analogRead(A2);
  float vout = value * (constADC/1024.0);  
  float vin = vout / (R2/(R1+R2));  

  float h = dht.readHumidity();
  float t = dht.readTemperature();
  float df = t*(9.0/5.0)+32;
  if (isnan(h) || isnan(t)) { h=0; df=0; }

  Serial.print(h);
  Serial.print("	");
  Serial.print(df);
  Serial.print("	");
  Serial.println(vin);

  delay(60000);
}

没什么太花哨的。我只是在Rpi上打开一个终端窗口并输入ssx并开始收集。如果我必须从IDE上传内容到Nano,我会在上传过程中使用^ C来停止SSX。然后我重新启动它。

打开写入文件然后关闭它可以防止任何数据损坏。

另一答案

聚会很晚,但我今天遇到了同样的问题。您需要做的是配置minicom不使用硬件流控制。这就是阻止你让minicom进入Arduino的输入。

Ctrl+A然后O(字母哦)并选择Serial port setup然后切换Hardware flow controlNo

一旦你完成了这个你可能希望将新设置保存为默认值:再次按Ctrl+A然后O(字母哦)但现在选择Save setup as dfl

以上是关于Raspberry pi不会使用minicom或python将串行数据发送到arduino的主要内容,如果未能解决你的问题,请参考以下文章

Raspberry pi 中的 Crontab 不会运行非常简单的脚本

Raspberry Pi 3 ~ C语言控制串口

PyAudio 在 Raspberry Pi 上引发警告

慢响应Firebase + Python + Raspberry pi

我如何让Raspberry Pi用python发送带有图片的电子邮件

Java ME 或 Java SE(Raspberry Pi 零)