mirror of
https://github.com/aaronleetw/savage-tracking.git
synced 2024-11-14 11:01:39 -08:00
add arduino
This commit is contained in:
parent
7d0b32382b
commit
1b9da2fe8b
1 changed files with 172 additions and 0 deletions
172
arduino/SavageTracker/SavageTracker.ino
Normal file
172
arduino/SavageTracker/SavageTracker.ino
Normal file
|
@ -0,0 +1,172 @@
|
|||
#include <SPI.h>
|
||||
#include <MFRC522.h>
|
||||
#include <LiquidCrystal_I2C.h>
|
||||
#include <Arduino.h>
|
||||
#include <ESP8266WiFi.h>
|
||||
#include <WiFiClient.h>
|
||||
#include <ESP8266HTTPClient.h>
|
||||
#include <ArduinoJson.h>
|
||||
|
||||
LiquidCrystal_I2C lcd(0x27, 16, 2); // set the LCD address to 0x27 for a 16 chars and 2 line display
|
||||
|
||||
#define SS_PIN D8
|
||||
#define RST_PIN D3
|
||||
#define BEEPER_PIN D0
|
||||
|
||||
#define WIFI_SSID "SEA"
|
||||
#define WIFI_PASS "sara9914"
|
||||
#define RECURL "http://192.168.0.11:5000/api/rfid"
|
||||
#define KEY "secret"
|
||||
|
||||
MFRC522 rfid(SS_PIN, RST_PIN); // Instance of the class
|
||||
|
||||
bool processingReq = false;
|
||||
WiFiClient wifiClient;
|
||||
|
||||
int cursorPos = 0;
|
||||
|
||||
void setup() {
|
||||
Serial.begin(9600);
|
||||
|
||||
lcd.init();
|
||||
lcd.backlight();
|
||||
lcdOut(0, "Savage Tumaz");
|
||||
|
||||
lcdOut("init SPI...");
|
||||
SPI.begin(); // Init SPI bus
|
||||
|
||||
lcdOut("init MFRC522...");
|
||||
rfid.PCD_SetAntennaGain(255);
|
||||
rfid.PCD_Init(); // Init MFRC522
|
||||
lcd.setCursor(14, 1);
|
||||
lcd.print("ok");
|
||||
|
||||
pinMode(BEEPER_PIN, OUTPUT);
|
||||
|
||||
connectWifi();
|
||||
|
||||
delay(1500);
|
||||
|
||||
lcdOut("Please Scan");
|
||||
}
|
||||
|
||||
void loop() {
|
||||
if (processingReq || !rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial()) {
|
||||
return;
|
||||
}
|
||||
|
||||
char uid[8];
|
||||
sprintf(uid, "%02X%02X%02X%02X", rfid.uid.uidByte[0], rfid.uid.uidByte[1], rfid.uid.uidByte[2], rfid.uid.uidByte[3]);
|
||||
Serial.println(uid);
|
||||
|
||||
rfid.PICC_HaltA();
|
||||
rfid.PCD_StopCrypto1();
|
||||
|
||||
digitalWrite(BEEPER_PIN, HIGH);
|
||||
delay(50);
|
||||
digitalWrite(BEEPER_PIN, LOW);
|
||||
|
||||
lcdOut(0, uid);
|
||||
lcdOut("Loading...");
|
||||
|
||||
DynamicJsonDocument body(200);
|
||||
body["uid"] = uid;
|
||||
body["key"] = KEY;
|
||||
char bodych[1024];
|
||||
serializeJson(body, bodych);
|
||||
Serial.println(bodych);
|
||||
|
||||
HTTPClient httpClient;
|
||||
httpClient.useHTTP10(true);
|
||||
httpClient.begin(wifiClient, RECURL);
|
||||
httpClient.addHeader("Content-Type", "application/json");
|
||||
Serial.print("RECURL: ");
|
||||
Serial.println(RECURL);
|
||||
|
||||
int httpCode = httpClient.POST(bodych);
|
||||
Serial.print("Send POST request to RECURL: ");
|
||||
Serial.println(RECURL);
|
||||
|
||||
if (httpCode == HTTP_CODE_OK) {
|
||||
DynamicJsonDocument doc(500);
|
||||
deserializeJson(doc, httpClient.getStream());
|
||||
httpClient.end();
|
||||
|
||||
String tmpstr;
|
||||
serializeJson(doc, tmpstr);
|
||||
Serial.println(tmpstr);
|
||||
|
||||
lcdOut(0, strdup(doc["status"]));
|
||||
lcd.print(":");
|
||||
lcd.print(strdup(doc["name"]));
|
||||
successTone();
|
||||
|
||||
lcdOut("Please Scan");
|
||||
} else {
|
||||
Serial.println("Server Respose Code:");
|
||||
Serial.println(httpCode);
|
||||
lcdOut(0, "ERROR ");
|
||||
lcd.print(httpCode);
|
||||
if (httpCode > 0) {
|
||||
DynamicJsonDocument doc(500);
|
||||
deserializeJson(doc, httpClient.getStream());
|
||||
lcdOut(strdup(doc["status"]));
|
||||
} else lcdOut(httpClient.errorToString(httpCode).c_str());
|
||||
errTone();
|
||||
delay(2000);
|
||||
lcdOut("Please Scan");
|
||||
}
|
||||
}
|
||||
|
||||
void lcdOut(const char* s) {
|
||||
lcdOut(strdup(s));
|
||||
}
|
||||
|
||||
void lcdOut(char* s) {
|
||||
lcdOut(1, s);
|
||||
}
|
||||
|
||||
void lcdOut(int line, char* s) {
|
||||
lcd.setCursor(0, line);
|
||||
lcd.print(" ");
|
||||
lcd.setCursor(0, line);
|
||||
lcd.print(s);
|
||||
}
|
||||
|
||||
void errTone() {
|
||||
twoTone(300);
|
||||
}
|
||||
|
||||
void successTone() {
|
||||
twoTone(50);
|
||||
}
|
||||
|
||||
void twoTone(int duration) {
|
||||
digitalWrite(BEEPER_PIN, HIGH);
|
||||
delay(duration);
|
||||
digitalWrite(BEEPER_PIN, LOW);
|
||||
delay(duration);
|
||||
digitalWrite(BEEPER_PIN, HIGH);
|
||||
delay(duration);
|
||||
digitalWrite(BEEPER_PIN, LOW);
|
||||
}
|
||||
|
||||
void connectWifi() {
|
||||
WiFi.disconnect();
|
||||
WiFi.mode(WIFI_STA);
|
||||
WiFi.begin(WIFI_SSID, WIFI_PASS);
|
||||
Serial.printf("\nDevice is connecting to WiFi using SSID %s and Passphrase %s.\n", WIFI_SSID, WIFI_PASS);
|
||||
lcdOut("WiFi Setup");
|
||||
int cnt = 0;
|
||||
// Keep looping until the WiFi is not connected.
|
||||
while (WiFi.status() != WL_CONNECTED) {
|
||||
if (cnt++ % 5 == 0) {
|
||||
lcd.setCursor(10, 1);
|
||||
lcd.print(" ");
|
||||
lcd.setCursor(10, 1);
|
||||
}
|
||||
lcd.print(".");
|
||||
delay(500);
|
||||
}
|
||||
lcdOut("WiFi OK!");
|
||||
}
|
Loading…
Reference in a new issue