02. ์ค๊ณ
๐RFID ํฐ์งํก์ด
โ๏ธ์ผ์
- RFID ๋ฆฌ๋๊ธฐ
๊ฐ ์ข์์ ํ๋จ์ RFID ํ๊ทธ๊ฐ์ ์ฝ์ด ๋ค์ฌ ํด๋น ์ข์์ ๋ฒํธ๋ฅผ ์ป๊ธฐ ์ํ ์ฅ์น์ด๋ค. ESP32 ์์ ๋น ์ข์ ์ฌ๋ถ๋ฅผ ๋ถ๋ฌ์ฌ ๋ ๋ช ๋ฒ ์ข์์ ์ ๋ณด๋ฅผ ๋ถ๋ฌ์ฌ์ง ๊ฒฐ์ ํ๋ค.
- ESP32
DB์ ์ ์ํ๊ณ RFID ๋ฆฌ๋๊ธฐ, ์ง๋๋ชจํฐ, ์คํผ์ปค, ์ฐํ ์ ์ด๋ฅผ ์ํ ๋ฉ์ธ ์ฐ์ฐ์ฅ์น์ด๋ค. RFID์ ํ๊ทธ๊ฐ์ ์ฝ๊ณ ์ด๋ฅผ DB์ ์ฐ๋ํ์ฌ ์คํผ์ปค์๊ฒ ์ด๋ค ์์ฑ์ ์ถ๋ ฅํ ์ง, ์ง๋์ ์ธ๋ฆด์ง ํ๋จํ๋ค.
- ์คํผ์ปค&์ฐํ
ESP32์์ ์ ๋ฌ๋ฐ์ ๋ช ๋ น์ ์คํํ์ฌ ์์ฑ์ ์ถ๋ ฅํ๋ค. WAV ์์ฑ ํ์ผ์ ์ต์ข ์ ์ผ๋ก byte ๋ณํ์ ํ๊ณ ์๋์ด๋ ธ์ talkie ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ์ ์ถ๋ ฅํ๋ค.
- ์ง๋ ๋ชจํฐ
ESP32์์ ์ ๋ฌ๋ฐ์ ๋ช ๋ น์ ์คํํ์ฌ ์ง๋์ ์ธ๋ฆฐ๋ค. ํด๋น ์ข์ ๋ฒํธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ์ดํฐ๋ค ์ค ๊ฐ์ฅ ์ต์ ๋ฐ์ดํฐ๊ฐ ๋น์๋ฆฌ์ผ ๊ฒฝ์ฐ ์ง๋๋ชจํฐ ๋ฅผ ์๋ํ๋ค. ์ง๋๋ชจํฐ๊ฐ ์์ง์๊ฐ๋ฝ์ด ๋ฟ๋๋ก ์ก๋ ๊ฒ์ ์ฌ๋ฐ๋ฅธ ์ ํ์ฌ์ฉ์ ๊ฐ์ด๋๋ผ์ธ์ผ๋ก ์ก์๋ค. ์ด๋ RFID ๋ฆฌ๋๊ธฐ์ ์ธ์ ๋ฒ์๊ฐ ๋ฆฌ๋๊ธฐ ์ ๋ฉด๊ณผ ํ๋ฉด์ด๊ณ (์ธก๋ฉดX) ๊ตฌ๊ฐ์ด ์งง์ ๊ฒ์ ๊ณ ๋ คํ ๊ฒ์ด๋ค.
โ๏ธ์์๋
โ๏ธํ๋ก ๊ตฌ์ฑ
โ๏ธ์๋์ด๋ ธ ์ฝ๋
#include <Arduino.h>
#include <MFRC522.h>
#include <SPI.h>
#include <WiFi.h>
#include <HTTPClient.h>
//์์ฑ ์ถ๋ ฅ
#include "Talkie.h"
//์ง๋ ๋ชจํฐ
#define SS_PIN 5
#define RST_PIN 27
const int vibPin = 16;
const int freq = 5000;
const int vibChannel = 0;
const int resolution = 8;
const char WIFI_SSID [ ] = "";
const char WIFI_PASSWORD [ ] = "";
//select.php๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋์ด ์๋ ๊ฐ์ ๋ถ๋ฌ์ค๊ธฐ
String avalue = "http://192.168.xx.xx/select_data1.php?";
String bvalue = "http://192.168.xx.xx/select_data2.php?";
String cvalue = "http://192.168.xx.xx/select_data3.php?";
HTTPClient http;
Talkie voice;
//MP3 ํ์ผ ์ ์์ฑ์ byte๋ก ๋ณํํ ๊ฐ
uint8_t num1[] PROGMEM = {}
uint8_t num2[] PROGMEM = {}
uint8_t num3[] PROGMEM = {}
MFRC522 rfid(SS_PIN, RST_PIN);
//-------------------------------------------------------
void setup() {
Serial.begin(9600);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.println("Connecting");
while(WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to WiFi network with IP Address: ");
Serial.println(WiFi.localIP());
SPI.begin();
rfid.PCD_Init();
Serial.println("Tap an RFID/NFC tag on the RFID-RC522 reader");
ledcSetup(vibChannel, freq, resolution);
ledcAttachPin(vibPin, vibChannel);
}
//-------------------------------------------------------
void loop() {
int httpCode;
String payload;
String tag_uid = "";
String rfid123;
if (rfid.PICC_IsNewCardPresent()) {
if (rfid.PICC_ReadCardSerial()) {
MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
Serial.print("RFID/NFC Tag Type: ");
Serial.println(rfid.PICC_GetTypeName(piccType));
// print UID in Serial Monitor in the hex format
Serial.print("UID:");
for (int i = 0; i < rfid.uid.size; i++) {
Serial.print(rfid.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(rfid.uid.uidByte[i], HEX);
tag_uid.concat(String(rfid.uid.uidByte[i] < 0x10 ? " 0" : " "));
tag_uid.concat(String(rfid.uid.uidByte[i], HEX));
}
Serial.println();
tag_uid.toUpperCase();
rfid.PICC_HaltA(); // halt PICC
rfid.PCD_StopCrypto1(); // stop encryption on PCD
}
}
//-------------------------------------------------------
//๊ฐ RFID ํ๊ทธ์ ๊ณ ์ ๋ฒํธ์ ์ข์ ๋ฒํธ๋ฅผ ๋งค์นญ
if (tag_uid.substring(1) == "99 EE 59 B3")
{
Serial.println("1๋ฒ");
rfid123 = "1";
Serial.println(rfid123);
}
else if (tag_uid.substring(1) == "A0 9E 59 B3")
{
Serial.println("1๋ฒ");
rfid123 = "1";
Serial.println(rfid123);
}
else if (tag_uid.substring(1) == "C2 1F 59 B3")
{
Serial.println("1๋ฒ");
rfid123 = "1";
Serial.println(rfid123);
}
//--------------------------------------------
else if (tag_uid.substring(1) == "5A 88 CE AD")
{
Serial.println("2๋ฒ");
rfid123 = "2";
Serial.println(rfid123);
}
else if (tag_uid.substring(1) == "52 7E 76 2F")
{
Serial.println("2๋ฒ");
rfid123 = "2";
Serial.println(rfid123);
}
else if (tag_uid.substring(1) == "52 B7 72 2F")
{
Serial.println("2๋ฒ");
rfid123 = "2";
Serial.println(rfid123);
}
//--------------------------------------------
else if (tag_uid.substring(1) == "AB AD 5D B3")
{
Serial.println("3๋ฒ");
rfid123 = "3";
Serial.println(rfid123);
}
else if (tag_uid.substring(1) == "F0 A9 2B B3")
{
Serial.println("3๋ฒ");
rfid123 = "3";
Serial.println(rfid123);
}
else if (tag_uid.substring(1) == "13 66 A2 1C")
{
Serial.println("3๋ฒ");
rfid123 = "3";
Serial.println(rfid123);
}
//---------------------------------------------------------------
//์ข์ ๋ฒํธ์ ์์ฑ ํ์ผ ๋งค์นญ(์ข์ ๋ฒํธ๊ฐ 1๋ฒ์ผ ๊ฒฝ์ฐ 1๋ฒ MP3ํ์ผ ์ฌ์)
if ((rfid123 == "1") || (rfid123 == "2") || (rfid123 == "3"))
{
if (rfid123 == "1") {
http.begin(avalue);
Serial.println(avalue);
voice.say(num1);
}
else if (rfid123 == "2") {
http.begin(bvalue);
Serial.println(bvalue);
voice.say(num2);
}
else if (rfid123 == "3") {
http.begin(cvalue);
Serial.println(cvalue);
voice.say(num3);
}
//-----------------------------------------------------
httpCode = http.GET();
if(httpCode > 0)
{
if(httpCode == HTTP_CODE_OK)
{
payload = http.getString();
payload = payload.substring(0, 1);
Serial.print("payload:");
Serial.println(payload);
if (payload == "0")
{
Serial.println("Seat");
ledcWrite(vibChannel, 255);
delay(1000);
ledcWrite(vibChannel, 0);
}
else
{
Serial.println("No seat");
}
}
else
{
Serial.printf("[HTTP] GET… code: %d\n", httpCode);
}
}
}
http.end();
delay(100);
}
๐Database: MySQL
https://m.blog.naver.com/jungha3071/222574019949
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก๋ MySQL์ ์ฌ์ฉํ์๊ณ , ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด4๋ฅผ ์๋ฒ๋ก ๋์๋ค. ์์๋๋ก Apache, PHP, MySQL์ ์ค์นํด์ฃผ์๊ณ , ์น ์์์๋ phpmyadmin์ ์ฌ์ฉํ์ฌ ๊ด๋ฆฌํด์ฃผ์๋ค.
DB๋ ์๋ ฅ์ผ์์ ๊ฐ์ ๋ฐ์์ค๊ณ ์ด ๊ฐ์ ์ดํ๋ฆฌ์ผ์ด์ ๊ณผ ์ง๋๋ชจํฐ์ ์ ๋ฌํ๋ ์ญํ ์ ํ๋ค. ์ด ๋, ๊ฐ์ ๋ฐ์์ฌ ๋์๋ insert ํ์์ php ํ์ผ์, ๊ฐ์ ์ ์กํ ๋๋ select ํ์์ php ํ์ผ์ ๋ง๋ค์ด์ฃผ์๋ค. ์ฐ๋์ ํ ๋์๋ ์ด์ ํด๋นํ๋ url์ ํ์ฉํ์๊ณ , ๊ฐ์ ๊ฐ์ ธ์ฌ ๋์๋ ํด๋น ์ข์์ ์ต์ ์ข์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋๋ก ์ค์ ํ์๋ค. ํ ์ข์๋น ํ๋์ ํ ์ด๋ธ์ ํ ๋นํ์๊ณ , ๋น์๋ฆฌ ์ฌ๋ถ๋ 0๊ณผ 1์ ์ฟผ๋ฆฌ ๊ฐ์ผ๋ก ํ๋จํ์๋ค. (๋น์๋ฆฌ์ผ ๊ฒฝ์ฐ 0, ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ 1) ์ ๋ฐ์ดํธ๋ 1์ด์ 1๋ฒ์ผ๋ก ์ค์ ํ์๋ค.
โ๏ธTable
โ๏ธinsert.php
<?php
//GET ๋ฐฉ์์ ํตํด ๋ฐ์ดํฐ ๊ฐ ๋ฐ๊ธฐ
$bus = $_GET["bus_value"];
$servername = "127.0.0.1";
$username = "team4";
$password = "1234qwer";
$dbname = "esp32test";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
//new๋ผ๋ ํ
์ด๋ธ์ ์ฟผ๋ฆฌ ๊ฐ ์ค bus_value์ ์๋ ฅ์ผ์๋ก๋ถํฐ ๋ฐ์์จ ๋ฐ์ดํฐ ๊ฐ ๋ฃ๊ธฐ
$sql = "INSERT INTO new (bus_value) VALUES ($bus)";
if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . " => " . $conn->error;
}
$conn->close();
?>
โ๏ธselect.php
<?php
$conn = mysqli_connect("127.0.0.1", "team4", "1234qwer" , "esp32test");
//new๋ผ๋ ํ
์ด๋ธ์ ์ฟผ๋ฆฌ ๊ฐ์ธ ID, bus_value ์ค ๋น์๋ฆฌ ์ฌ๋ถ์ ์ ๋ณด๊ฐ ๋ค์ด์๋ bus_value์ ๊ฐ๋ง ๋ฐ๊ธฐ
//ID(1์ด ๊ฐ๊ฒฉ์ ์๊ฐ)์ ์์๋๋ก ๊ฐ ๋ฐ๊ธฐ
$sql = "SELECT ID, bus_value FROM new ORDER BY ID DESC LIMIT 1“;
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
while($row = mysqli_fetch_assoc($result)) {
echo “๋ฒํธ: " . $row["ID"]. " ์ข์:" . $row["bus_value"]. "<br>";
}
}
else{
echo "ํ
์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ ์์ต๋๋ค.";
}
mysqli_close($conn);
?>
๐์๋ ฅ์ผ์ ๋ถ์ฐฉ ์์
โ๏ธ์์น ๋ฐ ๊ฐ์ ์ ์
โณ ์์ ๋์ ๊ฑธํฐ์๋ ์์ธ์์๋ ์ ์ฒด์ ์ผ์๊ฐ ๋ฟ์ง ์์ ๋น์ข์์ผ๋ก ํ๋จ
โณ ๋ฐ ๋ฐ์นจ๋์ ๋ฐ์ ์ฌ๋ฆฐ ์์ธ์์ ํ๋ฒ ์ง๊ฐ ์์์ ๋ฟ์ง ์์ ๋น์ข์์ผ๋ก ํ๋จ
โณ ๋์ ๊ฑธํฐ ์๋ ์์ธ์์ ๋ฌด๊ฒ์ค์ฌ์ด ๋๋ถ์ ์ ๋ฆฐ๋ค๋ ์ ์ ๊ณ ๋ คํด ์๋ ฅ ์ผ์ 2๊ฐ๋ฅผ ๋๋ถ ์ชฝ์ ์ถ๊ฐ
โ๏ธํ๋ก ๊ตฌ์ฑ
โ๏ธ์๋์ด๋ ธ ์ฝ๋
#include <Arduino.h>
#include <WiFi.h>
#include <HTTPClient.h>
//์๋ ฅ์ผ์ 5๊ฐ
int pressSensor1 = A0;
int pressSensor2 = A3;
int pressSensor3 = A6;
int pressSensor4 = A7;
int pressSensor5 = A4;
const char WIFI_SSID [ ] = "";
const char WIFI_PASSWORD [ ] = "";
//insert.php๋ฅผ ํตํด ์๋ ฅ์ผ์์ ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์ ์ก
String avalue = "http://192.168.xx.xx/insert_data1.php?red=";
HTTPClient http;
void setup() {
Serial.begin(9600);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.println("Connecting");
while(WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to WiFi network with IP Address: ");
Serial.println(WiFi.localIP());
}
void loop() {
//analogRead: ์๋ ฅ์ผ์์ ์ ํญ๊ฐ์ 0~1023์ ๊ฐ์ผ๋ก ๋ณํํ์ฌ ์ถ๋ ฅ
int a = analogRead(pressSensor1);
int b = analogRead(pressSensor2);
int c = analogRead(pressSensor3);
int d = analogRead(pressSensor4);
int e = analogRead(pressSensor5);
String dmlwk;
//5๊ฐ์ ์๋ ฅ์ผ์ ๊ฐ์ ํฉ์ด 0์ธ ๊ฒฝ์ฐ "๋น์๋ฆฌ(0)"๋ฅผ ์ถ๋ ฅ
//0์ด ์๋ ๊ฒฝ์ฐ ๋น์ด์์ง ์์ ์๋ฆฌ(1)"๋ฅผ ์ถ๋ ฅ
//์ถ๋ ฅ๋ ๊ฐ์ ์ฟผ๋ฆฌ์ ๋ฃ์ด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์ ์ก
if (a+b+c+d+e == 0)
{
dmlwk = "0";
}
else
{
dmlwk = "1";
}
http.begin(avalue+ dmlwk);
int httpCode = http.GET();
if(httpCode > 0) {
if(httpCode == HTTP_CODE_OK) {
String payload = http.getString();
Serial.println(payload);
} else {
Serial.printf("[HTTP] GET... code: %d\n", httpCode);
}
} else {
Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
}
http.end();
delay(1000);
}
• ์ผ์ ๊ฐ์ด "0"์ธ ๊ฒฝ์ฐ "0"์ ๊ฐ ์ ์ก → ์ถ๋ ฅ๊ฐ๋ค์ "ํฉ์ด 0์ด๋ฉด" ๋น์๋ฆฌ
• ์ผ์ ๊ฐ์ด "0"์ด ์๋ ๊ฒฝ์ฐ "1"์ ๊ฐ ์ ์ก → ์ถ๋ ฅ๊ฐ๋ค์ "ํฉ์ด 0์ด ์๋๋ฉด" ๋น์๋ฆฌ ์๋
๐์ดํ
์์ฑ์ง์ ์๋น์ค "์คํฌ๋ฆฐ๋ฆฌ๋" ์ด์ฉ
: ์ดํ์ ๊ฐ์ข ๊ธ์จ, ํ์ ์ฐฝ ๋ฑ์ ์์ฑ์ผ๋ก ์ฝ์ด์ฃผ๊ณ , ์ง๋์ ํตํด ๋ฒํผ์ ๊ตฌ๋ณํ์ฌ ์๊ฐ์ฅ์ ์ธ์ ์ดํ ์ฌ์ฉ์ ๋์์ ์ฃผ๋ ์ญํ
โ๏ธ์ฌ์ฉ๋ฒ
1. ์ดํ ํ๋ฉด์ ์ผ๊ณ ์๋ฌด ๊ณณ์ด๋ ํฐ์นํ๋ค.
2. ’ํ๋ฉด์ ๋ฒํผ์ ๋๋ฌ ํ์นํ๋ ค๋ ๋ฒ์ค๋ฒํธ๋ฅผ ์ ๋ ฅ ํ์ธ์’ ๋ผ๋ ์์ฑ์ ๋ฃ๊ณ ๋ ํ, ํ๋ฉด์ ํฐ์นํ๊ณ ๋ฒ ์ค ๋ฒํธ๋ฅผ ๋งํ๋ค.
3. ํด๋น ๋ฒ์ค์ ์ข์ ๋ฐฐ์น๋์ ํ๋ฉด์ ์๊ฐ๋ฝ์ผ๋ก ์ธ ์ด๋ด๋ฆฌ๋ฉฐ ์ง๋๊ณผ ์์ฑ์๋ด๋ฅผ ํตํด ๋ฐฐ์น๋๋ฅผ ์ตํ๋ค. ๋ฒ์ค ์์๊ทธ๋ฆผ์ด ํฐ์น๋๋ฉด ‘A๋ฒ ์ข์’์ด๋ผ๋ ์ง๋๊ณผ ํจ ๊ป ์์ฑ์๋ด๊ฐ ๋์จ๋ค.
4. ํ๋ฉด ํ๋จ์ ๋ฒํผ์ ํฐ์นํ์ฌ ๋น์ด ์๋ ์ข์ ์ ๋ณด ๋ฅผ ์๋ด๋ฐ๋๋ค. ‘์ฒ์์ผ๋ก’ ๋ฒํผ์ ์ด์ฉํ์ฌ ๋ฒ์ค๋ฒํธ ์ ๋ ฅ ํ๋ฉด์ผ๋ก ๋์๊ฐ ์ ์๋ค.
โ๏ธ๋ฒ์ค ์ข์ ๋ฐฐ์น๋ ํธ์ถ: ์์ฑ ์ธ์
ํ์นํ๋ ค๊ณ ํ๋ ๋ฒ์ค ๋ฒํธ๋ฅผ ์์ฑ์ผ๋ก ์ ๋ ฅํ ์ ์๊ฒ ํ๋ค.
์ด๋ ์๋๋ก์ด๋ ์คํ๋์ค ๋ด์ฅ API์ธ ‘Google Speech to Text’๋ฅผ ํตํด ๊ตฌํ๋์๋ค.
private RecognitionListener listener = new RecognitionListener() {
@Override
public void onReadyForSpeech(Bundle params) {
Toast.makeText(getApplicationContext(), text: "์์ฑ์ธ์ ์์", Toast.LENGTH_SHORT).show();
}
@Override
public void onBeginningOfSpeech() {
//๋งํ๊ธฐ ์์ํ์ ๋ ํธ์ถ
}
@Override
public void onRmsChanged(float rmsdB) {
//์
๋ ฅ๋ฐ๋ ์๋ฆฌ์ ํฌ๊ธฐ๋ฅผ ์๋ ค์ค
}
@Override
public void onBufferReceived(byte[] buffer) {
//๋ง์ ์์ํ๊ณ ์ธ์์ด ๋ ๋จ์ด๋ฅผ buffer์ ๋ด์
}
@Override
public void onEndOfSpeech() {
//๋งํ๊ธฐ๋ฅผ ์ค์งํ๋ฉด ํธ์ถ
}
โ๏ธ์์ฌ ์ข์ ์๋ด: ๋ฐ์ดํฐ๋ฒ ์ด์ค ํธ์ถ
๋ฒํผ์ ๋๋ฅด๋ฉด ํด๋น ์ข์์ ์ต์ ์ข์ ์ ๋ณด๋ง์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ฐ์ ธ์จ๋ค.
try {
String _url3="http://192.168.xx.xx/select_data1.php?"
URL url3=new URL(_url3);
HttpURLConnection conn3=(HttpURLConnection) url3.openConnection();
if (conn3 != null){
conn3.setConnectTimeout(10000);
conn3.setRequestMethod("GET");
conn3.setDoInput(true);
conn3.setDoOutput(true);
int resCode3=conn3.getResponseCode();
if (resCode3 == HttpURLConnection.HTTP_OK) {
BufferedReader reader3 = new BufferedReader(new InputStreamReader (conn3.getInputStream()));
String line3=null;
while (true) {
line3=reader3.readLine();
if (line3 == null)
break;
if (line3.equals(number)) {
line3="์ฐฉ์๊ฐ๋ฅ";
count3++;
}
else {
line3="์ฐฉ์๋ถ๊ฐ";
}
print(line3);
}
reader3.close();
}
conn3.disconnect();
}
'๐ญ Project > ๐ฆฏ Bus-Helper' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
01. ํ๋ก์ ํธ ์๊ฐ (0) | 2022.08.28 |
---|