【问题标题】:Raspberry pi will not send serial data to an arduino using either minicom or pythonRaspberry pi 不会使用 minicom 或 python 将串行数据发送到 arduino
【发布时间】:2013-07-23 19:15:14
【问题描述】:

我正在尝试让树莓派使用 tx/rx 引脚与 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()

但什么都没有显示。我在整个互联网上都查看了,但我没有找到解决方案。请帮忙,提前谢谢。

【问题讨论】:

    标签: python serial-port arduino raspberry-pi


    【解决方案1】:

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

    Ctrl+A,然后按O(字母Oh)并选择Serial port setup,然后将Hardware flow control切换为No

    完成此操作后,您可能希望将新设置保存为默认设置:再次按 Ctrl+A 然后按 O(字母 Oh),但现在选择 Save setup as dfl

    【讨论】:

      【解决方案2】:

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

      因此,您希望始终将 ser.println 用于该行的最后一部分。这在 Pi 和 Arduino 上都是一样的。

      另外,在 Minicom 中,您希望在每一行之后按 Enter,这样 ser.readline() 将返回该行。

      ..

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

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

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

      在 Rpi 方面,我最初使用的是

      ls /dev/ttyUSB*
      

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

      在 Arduino 方面,它始终是您程序中已有的相同串行内容。

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

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

      which python
      

      这是我在 Rpi3 上使用的:

      #!/usr/bin/python
      import serial
      from datetime import datetime
      tab = "\t"
      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\r\n") :
              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("\t");
        Serial.print(df);
        Serial.print("\t");
        Serial.println(vin);
      
        delay(60000);
      }
      

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-05-08
        • 2018-04-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-27
        相关资源
        最近更新 更多