Как отправлять и получать данные с 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')
@Badbunny52, 👍4
Обсуждение2 ответа
Ваша проблема заключается в том, что вы не отправляете значения из 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.
попробуйте с Firmata, это протокол, который устанавливает последовательную связь между компьютером и Arduino. Все, что вам нужно сделать, это иметь Firmata на плате Arduino и плагин pyFirmata, доступный для общения с Arduino из Python на вашей машине.
- Как разделить входящую строку?
- Какова максимальная длина провода для последовательной связи между двумя Arduino?
- Последовательная связь между двумя Arduino (запрос и получение)
- Не нашел датчик отпечатков пальцев :( Arduino Mega 2560 Adafruit Fingerprint Sensor
- Модуль SIM808: команда определения местоположения GSM (AT+CIPGSMLOC=1,1) дает неверное значение после выполнения команды отправки сообщения (AT+CMGS=+91xxxxxxxx)
- Как правильно получить MIDI с Arduino, с 6n138?
- Bluetooth-модуль HC-05 не принимает AT-команды
- Сбой Arduino во время последовательной печати без очевидной причины
"если (dat == 1)" будет иметь больше смысла, так как вы уже преобразовали символ в соответствующую цифру, @Juraj