C Mannequin/source code

3장 Program 소스 코드, ESP32 기반 온디바이스 AI를 이용한 스마트 커넥티드 제품 만들기

NDo 2026. 8. 27. 15:35
도남철, "ESP32 기반 온디바이스 AI를 이용한 스마트 커넥티드 제품 만들기", 퍼플, 2026.
알아보기 >
전자책( 교보, 예스24, 알라딘), Publish On Demand(교보)

"ESP32 기반 온디바이스 AI를 이용한 스마트 커넥티드 제품 만들기" 3장의 프로그램 소스코트를 제공합니다.

 

49p

​void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  Serial.println("Hello, ESP32!");
}
void loop() {
  // put your main code here, to run repeatedly:
  delay(10); // this delays for printing
  Serial.println("Hello, ESP32!");
}
 

52p

String receivedMessage = ""; // 입력 내용 저장 문자열
void setup() {
// UART0인 Serial에 115200 Bd 설정
Serial.begin(115200);
// 아두이노 IDE 시리얼 모니터에 쵝 메시지 출력
Serial.println(“Please enter a message:");
}

void loop() {
  // 시리얼 버퍼에 내용이 있는지 확인
  while (Serial.available()) {
    char incomingChar = Serial.read(); // 글자 읽기
    
    if (incomingChar == '\n') { // Enter가 입력된 경우
      Serial.print("You sent: ");
      Serial.println(receivedMessage); // 저장한 문자열 출력   
     receivedMessage = ""; // 시리얼 버퍼 초기화
    } else {
      receivedMessage += incomingChar; //Enter가 아니면 글자추가
    }
  }
}
 

55p

// URT를 위한 TX와 RX 핀 정의
#define TXD1 43
#define RXD1 44
// UART 인터페이스 이름 변경
HardwareSerial mySerial(1);
int counter = 0;

void setup() {
  Serial.begin(115200); // 시리얼 모니터 Bd
  mySerial.begin(9600, SERIAL_8N1, RXD1, TXD1);  // UART 정의
  Serial.println("ESP32 UART Transmitter");
}

void loop() {
// UART를 통해 메시지 전달
  mySerial.println(String(counter));  
  Serial.println("Sent: " + String(counter));
  // increment the counter
  counter++; 
  delay(1000); 
}
 

56p

// URT를 위한 TX와 RX 핀 정의
#define TXD1 21
#define RXD1 20
// UART 인터페이스 이름 변경
HardwareSerial mySerial(1);

void setup() {
  Serial.begin(115200);
  mySerial.begin(9600, SERIAL_8N1, RXD1, TXD1);  // UART setup 
  Serial.println("ESP32 UART Receiver");
}

void loop() {
  // 버퍼에 자료가 있는지 확인
  if (mySerial.available()) {
    String message = mySerial.readStringUntil('\n');
    Serial.println("Received: " + message);}
  else {
    Serial.println("No input");
  }
  delay(1000);
}
 

60p

#include <Seeed_Arduino_SSCMA.h>
#include <Wire.h>
SSCMA AI;

void setup()
{
    Wire.begin();
    AI.begin(&Wire);
    Serial.begin(9600);
}

void loop()
{
    if (!AI.invoke()) // 기계 학습 모델 적용
    {   Serial.println("invoke success");
        Serial.print("perf: prepocess=");
        Serial.print(AI.perf().prepocess);
        Serial.print(", inference=");
        Serial.print(AI.perf().inference);
        Serial.print(", postpocess=");
        Serial.println(AI.perf().postprocess);

        for (int i = 0; i < AI.boxes().size(); i++) // 객체탐지 성공
        {   Serial.print("Box[");
            Serial.print(i);
            Serial.print("] target=");
            Serial.print(AI.boxes()[i].target);
            Serial.print(", score=");
            Serial.print(AI.boxes()[i].score);// 직사각형 좌표출력
            Serial.print(", x=");
            Serial.print(AI.boxes()[i].x);
            Serial.print(", y=");
            Serial.print(AI.boxes()[i].y);
            Serial.print(", w=");
            Serial.print(AI.boxes()[i].w);
            Serial.print(", h=");
            Serial.println(AI.boxes()[i].h);
        }
        for (int i = 0; i < AI.classes().size(); i++)
        {   Serial.print("Class[");
            Serial.print(i);
            Serial.print("] target=");
            Serial.print(AI.classes()[i].target);
            Serial.print(", score=");
            Serial.println(AI.classes()[i].score);
        }
        for (int i = 0; i < AI.points().size(); i++)
        {   Serial.print("Point[");
            Serial.print(i);
            Serial.print("]: target=");
            Serial.print(AI.points()[i].target);
            Serial.print(", score=");
            Serial.print(AI.points()[i].score);
            Serial.print(", x=");
            Serial.print(AI.points()[i].x);
            Serial.print(", y=");
            Serial.println(AI.points()[i].y);
        }
        for (int i = 0; i < AI.keypoints().size(); i++)
        {   Serial.print("keypoint[");
            Serial.print(i);
            Serial.print("] target=");
            Serial.print(AI.keypoints()[i].box.target);
            Serial.print(", score=");
            Serial.print(AI.keypoints()[i].box.score);
            Serial.print(", box:[x=");
            Serial.print(AI.keypoints()[i].box.x);
            Serial.print(", y=");
            Serial.print(AI.keypoints()[i].box.y);
            Serial.print(", w=");
            Serial.print(AI.keypoints()[i].box.w);
            Serial.print(", h=");
            Serial.print(AI.keypoints()[i].box.h);
            Serial.print("], points:[");
            for (int j = 0; j < AI.keypoints()[i].points.size(); j++)
            {   Serial.print("[");
                Serial.print(AI.keypoints()[i].points[j].x);
                Serial.print(",");
                Serial.print(AI.keypoints()[i].points[j].y);
                Serial.print("],");
            }
            Serial.println("]");
        }
    }
}
 

64p

void setup()
{   pinMode(10,OUTPUT);  // 출력 GPIO 핀 결정
    digitalWrite(10,LOW); // 기본 설정은 LED 끄기
}

void loop()
{    digitalWrite(10,HIGH); // LED 켜기
      delay(500);
      digitalWrite(10,LOW);
      delay(500);
}
 

66p

#include <ESP32Servo.h>
Servo myservo;  // 서보 객체 생성
int pos = 0;    // 서보 초기 위치
int servoPin = 7; // XIAO ESP32 C3 pin
void setup() {
	myservo.setPeriodHertz(50);    // 50 hz servo
	myservo.attach(servoPin, 500, 2400);
}

void loop() {
for (pos = 0; pos <= 180; pos += 1) { // from 0 to 180
		myservo.write(pos); // 서보가 특정 위치로 이동
		delay(15); // 15ms 대기
	}
	for (pos = 180; pos >= 0; pos -= 1) { // from 180 to 0
		myservo.write(pos);
		delay(15);
	}
}
 

69p

create table a_table(
name varchar(32), 
date_create datetime default now()); //now()로 레코드 생성 시간 입력
 
desc a_table;
+-------------+-------------+------+-----+---------------------+
| Field       | Type        | Null | Key | Default             |
+-------------+-------------+------+-----+---------------------+
| name        | varchar(32) | YES  |     | NULL                |
| date_create | datetime    | YES  |     | current_timestamp() |
+-------------+-------------+------+-----+---------------------+
 
insert into a_table(name) values('NDoLab');
select * from a_table;
+--------+---------------------+
| name   | date_create         |
+--------+---------------------+
| NDoLab | 2025-09-15 13:53:57 |
+--------+---------------------+
 

70p

#define ESP32_MYSQL_DEBUG_PORT      Serial
#define _ESP32_MYSQL_LOGLEVEL_      1
#include <ESP32_MySQL.h>
#define USING_HOST_NAME     false

const char ssid[] = "***"; // 네트워크 이름
const char pass[] = "**********"; // 네트워크 접근 패스워드
#if USING_HOST_NAME
  char server[] = "192.168.0.20"; // 사용 hostname/URL로 변경 필요
#else
  IPAddress server(192, 168, 0, 20);
#endif
uint16_t server_port = 3306;    // MySQL server port (default: 3306)
char user[] = "***"; // MySQL 사용자 로그인
char password[] = "******"; // MySQL 사용자 패스워드
// Sample query
String IN_SQL=String("INSERT INTO a_table(name) values(‘NDoLab);");
ESP32_MySQL_Connection conn((Client *)&client);
ESP32_MySQL_Query *query_mem;
void setup()
{ Serial.begin(115200);
  while (!Serial && millis() < 5000); // wait for to connect
  ESP32_MYSQL_DISPLAY1("\nStarting Insert_ESP on", ARDUINO_BOARD);

  // Begin WiFi section
  ESP32_MYSQL_DISPLAY1("Connecting to", ssid);
  WiFi.begin(ssid, pass);
  while (WiFi.status() != WL_CONNECTED) 
  {
    delay(500);
    ESP32_MYSQL_DISPLAY0(".");
  }
  // 데이터베이스 연결 정보 출력
  ESP32_MYSQL_DISPLAY1("My IP address is:", WiFi.localIP());
  ESP32_MYSQL_DISPLAY3("Server @", server, ", Port =", server_port);
}

void runInsert()
{ ESP32_MySQL_Query query_mem = ESP32_MySQL_Query(&conn);
  if (conn.connected())
  {ESP32_MYSQL_DISPLAY(IN_SQL);  
    // Execute the query
    if ( !query_mem.execute(IN_SQL.c_str()) )
    {ESP32_MYSQL_DISPLAY("Insert error");
    }
    else
    {ESP32_MYSQL_DISPLAY("Data Inserted.");
    }
  }
  else
  { ESP32_MYSQL_DISPLAY("Disconnected. Can't insert.");
  }
}

void loop()
{ ESP32_MYSQL_DISPLAY("Connecting...");  
 if (conn.connectNonBlocking(server, server_port, user, password)!= RESULT_FAIL)
  {
    delay(500);
    runInsert();
    conn.close();                     // 연결 닫기
  } 
  else 
  {  ESP32_MYSQL_DISPLAY("\nConnect failed. Trying again.");
  }
  ESP32_MYSQL_DISPLAY("\nSleeping...");   
  ESP32_MYSQL_DISPLAY("======================================="); 
  delay(10000); // every 10 seconds
}
 

2026 NDoStudio

2026/3/2 처음 2026/3/2

반응형