Как отправлять и получать данные с Arduino MEGA 2560 и Python?

Привет сообщество Я относительно новичок в мире Arduino и я сталкиваюсь с некоторыми проблемами, пытаясь установить последовательную связь между MEGA 2560 и Python с помощью моего ПК, желаемый результат состоит в том, чтобы напечатать переменную " cnt " после в коде ниже в Arduino после общения с Python, ниже приведены коды, которые я использую для Arduino и в Python. [Примечание: Я использую датчик PIR(pin 4), который срабатывает, когда объект находится рядом, и печатает первый оператор на последовательном мониторе, поэтому проблема не существует.]

Arduino:

int pin = 4; //Output pin of sensor
int cnt = 0; //Count variable after processing in Python
int dat = 0; //Variable to ensure data is being transmitted from Python to Arduino

void setup() {
  Serial.begin(9600);
  pinMode(pin, INPUT);
  pinMode(LED_BUILTIN, OUTPUT); //This output is here to ensure the code runs to the dat if statement and the data is received
}

void loop() {
    int pirsensor = digitalRead(pin);

    if (pirsensor == 1){
      Serial.println("Hello, there's data here in Arduino"); //String as an example bt you want to send the data of the ArduCAM using the serial port
         if (Serial.available()>0){
              dat = Serial.read() - '0';
      
              if (dat == '1'){
                    cnt = cnt + 1;
                    Serial.print("Count is equal to: ");
                    Serial.print(cnt);
                    digitalWrite(LED_BUILTIN, HIGH); //Turn on LED
                    }
              }
   
          }
}

Код Python:

import serial

dat = serial.Serial('COM5',9600,timeout=1) #Serial object for communication
if (dat.in_waiting>0): #Conditional to verify if there is data in the serial port
    print('Hello')
    dat.write(1)
    print('Works')

, 👍4

Обсуждение

"если (dat == 1)" будет иметь больше смысла, так как вы уже преобразовали символ в соответствующую цифру, @Juraj


2 ответа


1

Ваша проблема заключается в том, что вы не отправляете значения из python в байтах. Более надежный способ-отправлять данные в байтах, таких как dat.write(b'1'), а затем получать их на Arduino с помощью Serial.ReadString(). У меня также было много проблем с этим, и это лучшее решение. "https://roboticsbackend.com/raspberry-pi-arduino-serial-communication/#:~:text=The%20easiest%20way%20is%20to,Arduino%20IDE)" Если нет, вы можете использовать интерфейс I2C. Просто будьте осторожны, на логическом уровне, если ваш Python работает на Raspberry Pi.

,

1

попробуйте с Firmata, это протокол, который устанавливает последовательную связь между компьютером и Arduino. Все, что вам нужно сделать, это иметь Firmata на плате Arduino и плагин pyFirmata, доступный для общения с Arduino из Python на вашей машине.

,