ESP32

ESP32 / ESP8266 Arduino: Using structs

기하 2021. 8. 16. 04:20

소개

이 게시물의 목적은 Arduino 코어에서 구조를 정의하는 방법을 설명하는 것입니다. 이것은 ESP32와 ESP8266 모두에서 테스트되었습니다. 그럼에도 불구하고 구조체는 C/C++ 언어의 기능이므로 Arduino 환경을 사용하여 프로그래밍할 수 있는 다른 모든 마이크로 컨트롤러에서 작동해야 합니다.

구조는 다른 유형의 데이터 멤버를 결합할 수 있는 정의된 데이터 유형으로 사용됩니다. 단일 데이터 유형으로 개념을 모델링하는 데 매우 유용하므로 작업하기가 훨씬 쉽습니다.

예를 들어, 구조를 사용하여 ID, 유형 및 값을 가질 수 있는 센서를 모델링할 수 있습니다. 센서를 나타내는 세 개의 개별 변수를 사용하는 대신 정의한 사용자 지정 구조의 단일 변수로 모델링할 수 있습니다.

구조를 정의하는 구문은 다음과 같습니다.

1
2

4
5
6
struct [struct name] {
member_type1 member_name1;
...


member_typeN  member_nameN;
};

선택적으로 구조 정의 직후에 변수를 선언할 수 있습니다. 이렇게 하려면 대괄호를 닫은 후 세미콜론 앞에 변수 이름을 지정하고 둘 이상의 변수가 있는 경우 쉼표로 구분하기만 하면 됩니다.

우리가 정의한 구조 유형의 변수를 선언하기 위해 다음 표기법을 사용합니다.

1 struct struct_type_name variable_name;

그런 다음 점 연산자를 사용하여 구조체의 데이터 멤버에 액세스할 수 있습니다. 값을 읽거나 할당하기 위해 액세스할 수 있습니다.

ESP32에 대한 테스트  는 ESP32 FireBeetle 보드에 통합된 DFRobot의 ESP-WROOM-32 장치를 사용하여 수행  되었습니다  . ESP8266에 대한 테스트는 DFRobot의 ESP8266 FireBeetle 보드 에서 수행되었습니다  .


코드

이 튜토리얼의 코드는 매우 간단합니다. IoT 센서를 모델링하는 구조를 만든 다음 해당 필드와 함께 작업합니다.

따라서 우리가 할 첫 번째 일은 서론 섹션에서 언급한 표기법을 사용하여 구조를 정의하는 것입니다. 숫자로 된 장치 ID, 유형 및 값이 있습니다. 두 개의 첫 번째 멤버는 정수이고 세 번째 멤버는 부동 소수점입니다.

1
2

4
5
struct sensor {
  int deviceId;
  int measurementType;
  float value;
};

Arduino 설정 기능으로 이동하여 먼저 직렬 연결을 열어 프로그램의 테스트 결과를 출력합니다.

1 Serial.begin(115200);

다음으로 이전에 정의한 데이터 유형의 변수를 선언합니다.

1 struct sensor mySensor;

그런 다음 점 연산자를 사용하여 액세스하는 각 데이터 멤버의 값을 설정합니다. 테스트 목적으로 임의의 값을 할당합니다.

1
2
mySensor.deviceId = 944;
mySensor.measurementType = 1;
mySensor.value = 20.4;

이제 구조체의 각 멤버에 값을 할당했으므로 해당 값을 직렬 포트에 인쇄합니다. 우리는 점 연산자를 사용하여 동일한 방식으로 액세스합니다.

1
2
Serial.println(mySensor.deviceId);
Serial.println(mySensor.measurementType);
Serial.println(mySensor.value);

이 튜토리얼의 최종 소스 코드는 아래와 같습니다.

1
2

4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
struct sensor {
  int deviceId;
  int measurementType;
  float value;
};


void setup() {
  Serial.begin(115200);


  struct sensor mySensor;


  mySensor.deviceId = 944;
  mySensor.measurementType = 1;
  mySensor.value = 20.4;


  Serial.println(mySensor.deviceId);
  Serial.println(mySensor.measurementType);
  Serial.println(mySensor.value);


}


void loop() {}


코드 테스트

코드를 테스트하려면 코드를 컴파일하고 Arduino IDE를 사용하여 업로드하기만 하면 됩니다.

절차가 완료되면 Arduino IDE의 직렬 모니터를 엽니다. 구조의 구성원에 할당된 값을 보여주는 그림 1과 유사한 출력이 표시되어야 합니다.

그림 1 – Arduino IDE 직렬 모니터에 인쇄된 프로그램의 출력.