소개
이 게시물의 목적은 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 직렬 모니터에 인쇄된 프로그램의 출력.
'ESP32' 카테고리의 다른 글
ESP32 Arduino: DHT22 Minimum Sampling Period (0) | 2021.08.16 |
---|---|
ESP32 Arduino: Temperature, humidity and CO2 concentration web server (0) | 2021.08.16 |
ESP32 Arduino: Software reset (0) | 2021.08.16 |
ESP32 Arduino: HTTPS GET Request (0) | 2021.08.16 |
ESP32 / ESP8366 Arduino: Creating a simple class (0) | 2021.08.16 |