Programming/Embedded

Jetson nano와 Arduino 사이 Serial 통신(Json Format)

Jetson nano와 아두이노간에 Json format을 사용하여 Serial 통신을 하는 방법을 설명한다.

예제에서는 Servo motor angle을 전송하였다.

사용 라이브러리 : ArduinoJson.h, seiral. time. json

Arduino source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <ArduinoJson.h>
#include <Servo.h>
 
int servopin1 = 5;
int servopin2 = 6;
 
String str = "";
Servo servo1;
Servo servo2;
 
StaticJsonDocument<200> doc;
 
void setup() {
  Serial.begin(9600);
  pinMode(7, OUTPUT);
  servo1.attach(servopin1);
  servo2.attach(servopin2);
  pinMode(9, OUTPUT);
  
  while (!Serial) continue;
}
 
void loop() {
  if(Serial.available())
  {
    str = Serial.readStringUntil('\n');
    DeserializationError error = deserializeJson(doc, str);
 
    if (error) {
      Serial.print(F("deserializeJson() failed: "));
      Serial.println(error.f_str());
      return;
    }
  }
 
  int conveyor_step = doc["conveyor_step"];
  int sorting_step = doc["sorting_step"];
 
  servo1.write(conveyor_step);
  servo2.write(sorting_step);
  digitalWrite(9, HIGH);
  delay(10);
}
cs

 

Jetson nano Python source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import serial
import time
import json
 
msg = {'conveyor_step' : 0'sorting_step' : 0}
port = '/dev/ttyUSB0' # 시리얼 포트
baud = 9600 # 시리얼 보드레이트(통신속도)
 
ser = serial.Serial(port,baud)
 
end_str = '\n'
 
while True:
    print("conveyor_step_Input: ")
    msg['conveyor_step'= input() 
    print("sorting_step_Input: ")
    msg['sorting_step'= input() 
    json_msg = json.dumps(msg)
    ser.write(json_msg.encode())
    ser.write(end_str.encode())
 
 
 
cs