This commit is contained in:
2024-08-13 16:46:44 -04:00
commit 8cb37c6011
418 changed files with 69567 additions and 0 deletions

View File

@@ -0,0 +1,22 @@
FROM alpine:latest
RUN echo "http://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories
RUN apk add curl esptool nano bash
RUN curl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh | BINDIR=/usr/bin sh
COPY arduino-cli.yaml .
RUN mv arduino-cli.yaml /root/.arduino15/
#INSTALL ARDUINO COMPONENTS
RUN arduino-cli board list
RUN arduino-cli core update-index
RUN arduino-cli board install
RUN arduino-cli core install esp32:esp32
WORKDIR /component

View File

@@ -0,0 +1,98 @@
#ifdef ESP32
#include <WiFi.h>
#include <ESPmDNS.h>
#else
#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#endif
#include <WiFiUdp.h>
#include <ArduinoOTA.h>
#include <TelnetStream.h>
#if defined(ESP32_RTOS) && defined(ESP32)
void ota_handle( void * parameter ) {
for (;;) {
ArduinoOTA.handle();
delay(3500);
}
}
#endif
void setupOTA(const char* nameprefix, const char* ssid, const char* password) {
// Configure the hostname
uint16_t maxlen = strlen(nameprefix) + 7;
char *fullhostname = new char[maxlen];
uint8_t mac[6];
WiFi.macAddress(mac);
snprintf(fullhostname, maxlen, "%s-%02x%02x%02x", nameprefix, mac[3], mac[4], mac[5]);
ArduinoOTA.setHostname(fullhostname);
delete[] fullhostname;
// Configure and start the WiFi station
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
// Wait for connection
while (WiFi.waitForConnectResult() != WL_CONNECTED) {
Serial.println("Connection Failed! Rebooting...");
delay(5000);
ESP.restart();
}
// Port defaults to 3232
// ArduinoOTA.setPort(3232); // Use 8266 port if you are working in Sloeber IDE, it is fixed there and not adjustable
// No authentication by default
// ArduinoOTA.setPassword("admin");
// Password can be set with it's md5 value as well
// MD5(admin) = 21232f297a57a5a743894a0e4a801fc3
// ArduinoOTA.setPasswordHash("21232f297a57a5a743894a0e4a801fc3");
ArduinoOTA.onStart([]() {
//NOTE: make .detach() here for all functions called by Ticker.h library - not to interrupt transfer process in any way.
String type;
if (ArduinoOTA.getCommand() == U_FLASH)
type = "sketch";
else // U_SPIFFS
type = "filesystem";
// NOTE: if updating SPIFFS this would be the place to unmount SPIFFS using SPIFFS.end()
Serial.println("Start updating " + type);
});
ArduinoOTA.onEnd([]() {
Serial.println("\nEnd");
});
ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
});
ArduinoOTA.onError([](ota_error_t error) {
Serial.printf("Error[%u]: ", error);
if (error == OTA_AUTH_ERROR) Serial.println("\nAuth Failed");
else if (error == OTA_BEGIN_ERROR) Serial.println("\nBegin Failed");
else if (error == OTA_CONNECT_ERROR) Serial.println("\nConnect Failed");
else if (error == OTA_RECEIVE_ERROR) Serial.println("\nReceive Failed");
else if (error == OTA_END_ERROR) Serial.println("\nEnd Failed");
});
ArduinoOTA.begin();
TelnetStream.begin();
Serial.println("OTA Initialized");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
#if defined(ESP32_RTOS) && defined(ESP32)
xTaskCreate(
ota_handle, /* Task function. */
"OTA_HANDLE", /* String with name of task. */
10000, /* Stack size in bytes. */
NULL, /* Parameter passed as input of the task */
1, /* Priority of the task. */
NULL); /* Task handle. */
#endif
}

View File

@@ -0,0 +1,45 @@
#ifndef RFID_h
#define RFID_h
#include "logger.h"
class RFID
{
private:
public:
RFID () {} // CONSTRUCTOR
// function ro validate
bool validate (String tag){
bool r;
r = false;
if ((tag.length() == 16) || // RUND
(tag.length() == 36)) // Eckig
{r = true;}
else {
logger.log(0, "WRONG TAG");
logger.log(0, tag);
logger.log(0, String(tag.length()));
}
return r;
}
String toHex (int c){
String r;
if (c < 15) {
r = '0';
r = r+ String ( c, HEX )[0];
} else {
r = String ( c, HEX )[0];
r = r+ String ( c, HEX )[1];
}
return r;
}
};
#endif

View File

@@ -0,0 +1,262 @@
#ifndef BLUETOOTH_h
#define BLUETOOTH_h
#include <NimBLEDevice.h>
#include "logger.h"
static bool doConnect = false;
static uint32_t scanTime = 0;
static NimBLEAdvertisedDevice* advDevice;
static void scanEndedCB(NimBLEScanResults results){
logger.log(5, "Scan Ended" );
} // END SCANENDEDCB
class ClientCallbacks : public NimBLEClientCallbacks {
void onConnect(NimBLEClient* pClient) {
logger.log(5, "Connected");
};
void onDisconnect(NimBLEClient* pClient) {
logger.log(5, "Disconnected - Starting Scan" );
NimBLEDevice::getScan()->start(scanTime, scanEndedCB);
};
bool onConnParamsUpdateRequest(NimBLEClient* pClient, const ble_gap_upd_params* params) {
if(params->itvl_min < 24) { /** 1.25ms units */
return false;
} else if(params->itvl_max > 40) { /** 1.25ms units */
return false;
} else if(params->latency > 2) { /** Number of intervals allowed to skip */
return false;
} else if(params->supervision_timeout > 100) { /** 10ms units */
return false;
}
return true;
};
uint32_t onPassKeyRequest(){
return 123456;
};
bool onConfirmPIN(uint32_t pass_key){
return true;
};
void onAuthenticationComplete(ble_gap_conn_desc* desc){
if(!desc->sec_state.encrypted) {
logger.log(5, "Encrypt connection failed.");
NimBLEDevice::getClientByID(desc->conn_handle)->disconnect();
return;
}
};
};// END CLIENTCALLBACK
class AdvertisedDeviceCallbacks: public NimBLEAdvertisedDeviceCallbacks {
private:
LOGGER logger;
void onResult(NimBLEAdvertisedDevice* advertisedDevice) {
logger.log(5, advertisedDevice->toString().c_str() );
if(advertisedDevice->isAdvertisingService(NimBLEUUID::fromString("0x180F") ))
{
logger.log(5, "Service Found");
NimBLEDevice::getScan()->stop();
advDevice = advertisedDevice;
doConnect = true;
}
};
}; // END ADVERTISED CALLBACK
class BLUETOOTH
{
private:
ClientCallbacks clientCB;
static void notifyCB(NimBLERemoteCharacteristic* pRemoteCharacteristic, uint8_t* pData, size_t length, bool isNotify){
std::string str = (isNotify == true) ? "Notification" : "Indication";
str += " from ";
/** NimBLEAddress and NimBLEUUID have std::string operators */
str += std::string(pRemoteCharacteristic->getRemoteService()->getClient()->getPeerAddress());
str += ": Service = " + std::string(pRemoteCharacteristic->getRemoteService()->getUUID());
str += ", Characteristic = " + std::string(pRemoteCharacteristic->getUUID());
str += ", Value = " + std::string((char*)pData, length);
logger.log(5,"NOTIFY CALLBACK ");
logger.log(5,str.c_str());
} // END NOTIFYCB
bool connectToServer() {
logger.log(5,"Connected To Server");
NimBLEClient* pClient = nullptr;
if(NimBLEDevice::getClientListSize()) {
pClient = NimBLEDevice::getClientByPeerAddress(advDevice->getAddress());
if(pClient){
if(!pClient->connect(advDevice, false)) {
logger.log(5,"Reconnect Failed");
return false;
}
logger.log(5,"Reconnected Client");
}
else {
pClient = NimBLEDevice::getDisconnectedClient();
}
}
if(!pClient) {
if(NimBLEDevice::getClientListSize() >= NIMBLE_MAX_CONNECTIONS) {
logger.log(5,"Max clients reached");
return false;
}
pClient = NimBLEDevice::createClient();
pClient->setClientCallbacks(&clientCB, false);
pClient->setConnectionParams(12,12,0,51);
/** Set how long we are willing to wait for the connection to complete (seconds), default is 30. */
pClient->setConnectTimeout(5);
logger.log(5,advDevice->toString().c_str());
if (!pClient->connect(advDevice)) {
NimBLEDevice::deleteClient(pClient);
logger.log(5,"Failed to connect, deleted client");
Serial.println("Failed to connect, deleted client");
return false;
}
}
if(!pClient->isConnected()) {
if (!pClient->connect(advDevice)) {
logger.log(5,"Failed to connect");
return false;
}
}
logger.log(5,"Connected to");
logger.log(5,pClient->getPeerAddress().toString().c_str());
/** Now we can read/write/subscribe the charateristics of the services we are interested in */
NimBLERemoteService* pSvc = nullptr;
NimBLERemoteCharacteristic* pChr = nullptr;
NimBLERemoteDescriptor* pDsc = nullptr;
pSvc = pClient->getService(NimBLEUUID::fromString("0x181D"));
if(pSvc) { /** make sure it's not null */
logger.log(5,"Service found");
pChr = pSvc->getCharacteristic(NimBLEUUID::fromString("0x2A9D"));
if(pChr) { /** make sure it's not null */
logger.log(5,"Charactheristic found");
if(pChr->canRead()) {
logger.log(5,"Can read");
Serial.print(pChr->getUUID().toString().c_str());
Serial.print(" Value: ");
Serial.println(pChr->readValue().c_str());
}
/** registerForNotify() has been deprecated and replaced with subscribe() / unsubscribe().
* Subscribe parameter defaults are: notifications=true, notifyCallback=nullptr, response=false.
* Unsubscribe parameter defaults are: response=false.
*/
if(pChr->canNotify()) {
logger.log(5,"Can Notify");
//if(!pChr->registerForNotify(notifyCB)) {
if(!pChr->subscribe(true, notifyCB)) {
/** Disconnect if subscribe failed */
pClient->disconnect();
return false;
}
}
else if(pChr->canIndicate()) {
logger.log(5,"Can indicate");
/** Send false as first argument to subscribe to indications instead of notifications */
//if(!pChr->registerForNotify(notifyCB, false)) {
if(!pChr->subscribe(false, notifyCB)) {
/** Disconnect if subscribe failed */
pClient->disconnect();
return false;
}
}
}
} else {
logger.log(5,"Service not found");
}
return true;
}
public:
BLUETOOTH () {} // CONSTRUCTOR
void setup (){
NimBLEDevice::init("");
NimBLEDevice::setSecurityAuth(/*BLE_SM_PAIR_AUTHREQ_BOND | BLE_SM_PAIR_AUTHREQ_MITM |*/ BLE_SM_PAIR_AUTHREQ_SC);
NimBLEDevice::setPower(ESP_PWR_LVL_P9); /** +9db */
NimBLEScan* pScan = NimBLEDevice::getScan();
pScan->setAdvertisedDeviceCallbacks(new AdvertisedDeviceCallbacks());
pScan->setInterval(45);
pScan->setWindow(15);
pScan->setActiveScan(true);
pScan->start(scanTime, scanEndedCB);
} // setup()
void loop (){
if(doConnect){
Serial.println("doCOnnect=true");
if(connectToServer()) {
logger.log(1, "Connected to BLE");
Serial.println("Success! we should now be getting notifications, scanning for more!");
} else {
Serial.println("Failed to connect, starting scan");
}
NimBLEDevice::getScan()->start(scanTime,scanEndedCB);
}
doConnect = false;
} // loop()
};
#endif

View File

@@ -0,0 +1,108 @@
// pip install pyserial
// MQTT JOEL GÄhwiller
// Telnetstream Andrassi
#include "bluetooth.h"
#include <WiFi.h>
#include <ArduinoOTA.h>
#include <MQTT.h>
#include "RFID.h"
#include "logger.h"
#define rxRFID 15 // COM2: 16 -- 18
#define txRFID 2 // COM2: 17 -- 19
#define GPIO6 6
const char* ssid = "coral";
const char* password = "135798642";
const char* OTApassword = "135798642";
IPAddress apIP(192, 168, 200, 1);
IPAddress Gateway(192, 168, 200, 100);
IPAddress MQTTserver(192, 168, 200, 2);
unsigned long StartTime = millis();
WiFiClient net;
MQTTClient client;
RFID rfid;
int loopCounter = 0;
String buffer;
unsigned long TimeStamp;
bool readProgress;
BLUETOOTH bt;
void setup() {
Serial.begin(115200);
bt.setup();
WiFi.mode(WIFI_AP_STA);
WiFi.softAPConfig(apIP, Gateway, IPAddress(255, 255, 255, 0));
WiFi.softAP(ssid, password);
pinMode(rxRFID, INPUT);
pinMode(txRFID, OUTPUT);
Serial2.begin(57600, SERIAL_8N1,rxRFID,txRFID );
client.begin(MQTTserver, net);
client.setTimeout (500);
ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
});
ArduinoOTA.setHostname("Coral");
ArduinoOTA.setPassword(OTApassword);
ArduinoOTA.begin();
logger.setup();
buffer = "";
readProgress = false;
Serial.println("END SETUP");
}
void loop() {
logger.loop();
bt.loop();
ArduinoOTA.handle();
// ********************** READ RFID ******************
if (!logger.serialBridge)
{
while (Serial2.available()) {
ArduinoOTA.handle();
buffer = buffer + rfid.toHex ( Serial2.read() );
TimeStamp = millis();
readProgress = true;
}
if (((millis() - TimeStamp)>200) && readProgress) // ABORT WHEN TIMEOUT
{
if (rfid.validate (buffer)) {
buffer.toUpperCase();
client.publish("tag", buffer);
logger.log(5, buffer);
}
buffer = "";
readProgress = false;
}
// ************ CALCULATE LOOP TIME ************************
loopCounter++;
if (loopCounter > 10000) {
unsigned long delta = millis() - StartTime;
char buf[50];
sprintf(buf, "Loop time: %lu - %lu - %lu", millis(), StartTime, delta);
logger.log(5, buf);
StartTime = millis();
loopCounter = 0;
if (!client.connected()) { client.connect("coral", "public", "public"); }
}
}
}

View File

@@ -0,0 +1,6 @@
#!/bin/bash
while [ 1=1 ]
do
nc 192.168.200.1 23
done

View File

@@ -0,0 +1,100 @@
#ifndef LOGGER_h
#define LOGGER_h
#include <TelnetStream.h>
#define versionString "1.3"
#define BLUELED 2
class LOGGER
{
private:
unsigned long StartTime = millis();
int counter = 0;
int loglevel = 0;
public:
LOGGER () {} // CONSTRUCTOR
bool serialBridge = false;
void writeTelnet()
{
}
void setup (){
pinMode(BLUELED, OUTPUT);
digitalWrite(BLUELED, LOW);
TelnetStream.begin();
}
void loop (){
if ( serialBridge ){
while (Serial2.available()) { TelnetStream.print ( Serial2.read() ); }
Serial2.print( TelnetStream.read() );
} else {
switch (TelnetStream.read()) {
case 'h':
TelnetStream.println("HELP");
TelnetStream.println("i: info");
TelnetStream.println("l: toggle LED - not working");
TelnetStream.println("r: revisions");
TelnetStream.println("s: turn on serial bridge");
TelnetStream.println("");
TelnetStream.println("0-5: set Log Level");
TelnetStream.println("0: system");
TelnetStream.println("3: debug");
TelnetStream.println("5: verbose");
break;
case 's':
TelnetStream.println( "Turning on serialBridge" );
serialBridge = true;
break;
case 'i':
TelnetStream.print( "Version: " );
TelnetStream.println( versionString );
TelnetStream.print( "Loglevel: " );
TelnetStream.println( loglevel );
break;
case 'r':
TelnetStream.println( "Revisions: " );
TelnetStream.println( "1.1 - BLE, no Diag " );
TelnetStream.println( "1.0 - Initial Release " );
break;
case 'l':
digitalWrite(BLUELED, !digitalRead(BLUELED));
break;
case '0':
loglevel = 0;
break;
case '3':
loglevel = 3;
break;
case '5':
loglevel = 5;
break;
}
}
}
void log(int ll, String buffer )
{
if ( ll<= loglevel) { TelnetStream.println( buffer );
Serial.println (buffer);
}
}
};
LOGGER logger;
#endif

View File

@@ -0,0 +1,11 @@
version: '3'
services:
arduino-cli:
build: .
volumes:
- ./components:/components:rw
network_mode: host
restart: always
# devices:
# - "/dev/ttyUSB0:/dev/ttyUSB0"

View File

@@ -0,0 +1 @@
,oliver,mate,13.08.2024 16:34,file:///mnt/home/oliver/.config/libreoffice/4;

BIN
hardware/PCB/WTF.odp Normal file

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

221
hardware/PCB/easyEDA/info Normal file
View File

@@ -0,0 +1,221 @@
{
"uuid": "4fb34427f6182102986dd6b6232c7d6b",
"path": "Offline/CORAL",
"name": "CORAL",
"content": "",
"created_at": "2023-06-14 08:19:46",
"updated_at": "2023-06-18 19:04:23",
"stick": "",
"documents": [
{
"uuid": "38d284b3844fb5fb0512e237a9b44b0e",
"title": "Sheet_1",
"description": "",
"docType": "1",
"master": "",
"thumb": "/images/thumb-default.png",
"components": {
"d59c03d01d06cf4030393286e07f7c4d": 1,
"abe4fed2a2824e27a7c2c22024800ab1": 4,
"01d8b1f601b5416790d438b9bde230ee": 2,
"24eeb2ceca08480b92b847b6a310acda": 7,
"f6ad71c7fbf543d592eb11b3550882cd": 1,
"a0f90df57c5149708fb44d20e56f6c7d": 1
},
"BOM": [
[
"Value",
"Quantity",
"Package",
"Components",
"CustomPara"
],
[
"0.1u",
2,
"C0603",
"C1,C7",
{
"BOM_Supplier Part": "",
"BOM_Supplier": "",
"BOM_Manufacturer Part": "",
"puuid": "f8151fdc728a41ebbc304e11d39e5437",
"uuid": "24eeb2ceca08480b92b847b6a310acda"
}
],
[
"0.047u",
1,
"C0603",
"C2",
{
"BOM_Supplier Part": "",
"BOM_Supplier": "",
"BOM_Manufacturer Part": "",
"puuid": "f8151fdc728a41ebbc304e11d39e5437",
"uuid": "24eeb2ceca08480b92b847b6a310acda"
}
],
[
"0.33u",
3,
"C0603",
"C3,C4,C5",
{
"BOM_Supplier Part": "",
"BOM_Supplier": "",
"BOM_Manufacturer Part": "",
"puuid": "f8151fdc728a41ebbc304e11d39e5437",
"uuid": "24eeb2ceca08480b92b847b6a310acda"
}
],
[
"0.22u",
1,
"C0603",
"C6",
{
"BOM_Supplier Part": "",
"BOM_Supplier": "",
"BOM_Manufacturer Part": "",
"puuid": "f8151fdc728a41ebbc304e11d39e5437",
"uuid": "24eeb2ceca08480b92b847b6a310acda"
}
],
[
"PZ254-2-04-S",
1,
"HDR-SMD_8P-P2.54-V-M-R2-C4-LS7.4",
"GPIO",
{
"BOM_Supplier": "LCSC",
"BOM_Supplier Part": "C3294462",
"BOM_Manufacturer": "HCTL(华灿天禄)",
"BOM_Manufacturer Part": "PZ254-2-04-S",
"BOM_JLCPCB Part Class": "Extended Part",
"puuid": "5f84e4e6ebf64c4495427ef3dfd9533b",
"uuid": "f6ad71c7fbf543d592eb11b3550882cd"
}
],
[
"1715734",
4,
"CONN-TH_3P-P5.08_1715734",
"P-IN,P-OUT,S1,S2",
{
"BOM_Supplier": "LCSC",
"BOM_Supplier Part": "C480520",
"BOM_Manufacturer": "Phoenix Contact(菲尼克斯)",
"BOM_Manufacturer Part": "1715734",
"BOM_JLCPCB Part Class": "Extended Part",
"puuid": "f39d0943887444fa91a8d852ef4d0229",
"uuid": "abe4fed2a2824e27a7c2c22024800ab1"
}
],
[
"PM254-1-15-Z-8.5",
2,
"HDR-TH_15P-P2.54-V-F",
"U1,U9",
{
"BOM_Supplier": "LCSC",
"BOM_Supplier Part": "C2897378",
"BOM_Manufacturer": "HCTL(华灿天禄)",
"BOM_Manufacturer Part": "PM254-1-15-Z-8.5",
"BOM_JLCPCB Part Class": "Extended Part",
"puuid": "9113d2c51a594771a42e03539b691133",
"uuid": "01d8b1f601b5416790d438b9bde230ee"
}
],
[
"MAX3232CDR",
1,
"NSOP-16_L9.9-W3.9-P1.27-LS6.0-BL",
"U2",
{
"BOM_Supplier": "LCSC",
"BOM_Manufacturer": "TI(德州仪器)",
"BOM_Manufacturer Part": "MAX3232CDR",
"BOM_Supplier Part": "C45843",
"BOM_JLCPCB Part Class": "Extended Part",
"puuid": "23c69f43a3474f21a8b19d397b5069ea",
"uuid": "d59c03d01d06cf4030393286e07f7c4d"
}
],
[
"LM7805L-TF3-T",
1,
"TO-220F-3_L10.2-W4.9-P2.54-L",
"U3",
{
"BOM_Supplier": "LCSC",
"BOM_Manufacturer": "UTC(友顺)",
"BOM_Manufacturer Part": "LM7805L-TF3-T",
"BOM_Supplier Part": "C71107",
"BOM_JLCPCB Part Class": "Extended Part",
"puuid": "b1c0dd698913434f8213e3b0c8fb2603",
"uuid": "a0f90df57c5149708fb44d20e56f6c7d"
}
]
],
"updateTime": 1687124911,
"createTime": 1686745187,
"histories": [],
"created_at": "2023-06-14 08:19:47",
"updated_at": "2023-06-18 17:48:31"
},
{
"uuid": "ffa5c69b36238aad41ce2a097d5d47ae",
"puuid": "4fb34427f6182102986dd6b6232c7d6b",
"title": "PCB_CORAL",
"filename": "PCB_CORAL.json",
"description": "",
"docType": "3",
"master": "",
"thumb": "/images/thumb-default.png",
"components": {
"f8151fdc728a41ebbc304e11d39e5437": 7,
"5f84e4e6ebf64c4495427ef3dfd9533b": 1,
"f39d0943887444fa91a8d852ef4d0229": 4,
"9113d2c51a594771a42e03539b691133": 2,
"23c69f43a3474f21a8b19d397b5069ea": 1,
"b1c0dd698913434f8213e3b0c8fb2603": 1
},
"BOM": [],
"updateTime": 1687126885,
"createTime": 1687126611,
"histories": [],
"created_at": "2023-06-18 18:16:51",
"updated_at": "2023-06-18 18:21:25"
},
{
"uuid": "de1d7bfb85f526dacc3947745ba4b469",
"puuid": "4fb34427f6182102986dd6b6232c7d6b",
"title": "PCB_CORAL_2",
"filename": "PCB_CORAL_2.json",
"description": "",
"docType": "3",
"master": "",
"thumb": "/images/thumb-default.png",
"components": {
"f8151fdc728a41ebbc304e11d39e5437": 7,
"5f84e4e6ebf64c4495427ef3dfd9533b": 1,
"f39d0943887444fa91a8d852ef4d0229": 4,
"9113d2c51a594771a42e03539b691133": 2,
"23c69f43a3474f21a8b19d397b5069ea": 1,
"b1c0dd698913434f8213e3b0c8fb2603": 1
},
"BOM": [],
"updateTime": 1687129463,
"createTime": 1687128298,
"histories": [],
"created_at": "2023-06-18 18:44:58",
"updated_at": "2023-06-18 19:04:23"
}
],
"sort": [],
"title": "CORAL",
"foldername": "CORAL",
"schfilename": "CORAL.json",
"schfilemtime": 1687124911655
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 233 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.
1 ID Name Designator Footprint Quantity Manufacturer Part Manufacturer Supplier Supplier Part Price
2 1 0.1u C1,C7 C0603 2
3 2 0.047u C2 C0603 1
4 3 0.33u C3,C4,C5 C0603 3
5 4 0.22u C6 C0603 1
6 5 PZ254-2-04-S GPIO HDR-SMD_8P-P2.54-V-M-R2-C4-LS7.4 1 PZ254-2-04-S HCTL(华灿天禄) LCSC C3294462 0.079
7 6 1715734 P-IN,P-OUT,S1,S2 CONN-TH_3P-P5.08_1715734 4 1715734 Phoenix Contact(菲尼克斯) LCSC C480520 0.621
8 7 PM254-1-15-Z-8.5 U1,U9 HDR-TH_15P-P2.54-V-F 2 PM254-1-15-Z-8.5 HCTL(华灿天禄) LCSC C2897378 0.224
9 8 MAX3232CDR U2 NSOP-16_L9.9-W3.9-P1.27-LS6.0-BL 1 MAX3232CDR TI(德州仪器) LCSC C45843 0.772
10 9 LM7805L-TF3-T U3 TO-220F-3_L10.2-W4.9-P2.54-L 1 LM7805L-TF3-T UTC(友顺) LCSC C71107 0.224

Binary file not shown.

Binary file not shown.
1 Designator Footprint Mid X Mid Y Ref X Ref Y Pad X Pad Y Layer Rotation Comment
2 C1 C0603 30.35mm 87.63mm 30.35mm 87.63mm 29.65mm 87.63mm T 0 0.1u
3 C2 C0603 15.37mm 81.03mm 15.37mm 81.03mm 16.07mm 81.03mm T 180 0.047u
4 C3 C0603 18.92mm 80.9mm 18.92mm 80.9mm 18.22mm 80.9mm T 0 0.33u
5 C4 C0603 10.8mm 83.69mm 10.8mm 83.69mm 10.09mm 83.69mm T 0 0.33u
6 C5 C0603 10.8mm 87mm 10.8mm 87mm 10.09mm 87mm T 0 0.33u
7 C6 C0603 21.59mm 63.12mm 21.59mm 63.12mm 22.29mm 63.12mm T 180 0.22u
8 C7 C0603 25.27mm 63.12mm 25.27mm 63.12mm 24.57mm 63.12mm T 0 0.1u
9 GPIO HDR-SMD_8P-P2.54-V-M-R2-C4-LS7.4 70.23mm 55.25mm 70.23mm 55.25mm 74.04mm 58.05mm T 180 PZ254-2-04-S
10 P-IN CONN-TH_3P-P5.08_1715734 22.23mm 49.66mm 22.23mm 49.66mm 27.31mm 49.66mm T 180 1715734
11 P-OUT CONN-TH_3P-P5.08_1715734 38.74mm 49.78mm 38.74mm 49.78mm 43.82mm 49.78mm T 180 1715734
12 S1 CONN-TH_3P-P5.08_1715734 55.5mm 49.66mm 55.5mm 49.66mm 60.58mm 49.66mm T 180 1715734
13 S2 CONN-TH_3P-P5.08_1715734 11.94mm 63.88mm 11.94mm 63.88mm 11.94mm 58.8mm T 90 1715734
14 U1 HDR-TH_15P-P2.54-V-F 47mm 65.6mm 47mm 65.6mm 29.22mm 65.6mm T 0 PM254-1-15-Z-8.5
15 U2 NSOP-16_L9.9-W3.9-P1.27-LS6.0-BL 19.18mm 87.88mm 19.18mm 87.88mm 14.73mm 85.12mm T 0 MAX3232CDR
16 U3 TO-220F-3_L10.2-W4.9-P2.54-L 23.62mm 58.04mm 23.62mm 58.04mm 21.08mm 58.04mm T 0 LM7805L-TF3-T
17 U9 HDR-TH_15P-P2.54-V-F 47mm 91mm 47mm 91mm 29.22mm 91mm T 0 PM254-1-15-Z-8.5

92
hardware/README.md Normal file
View File

@@ -0,0 +1,92 @@
# Hardware
## Getting started
To make it easy for you to get started with GitLab, here's a list of recommended next steps.
Already a pro? Just edit this README.md and make it your own. Want to make it easy? [Use the template at the bottom](#editing-this-readme)!
## Add your files
- [ ] [Create](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#create-a-file) or [upload](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#upload-a-file) files
- [ ] [Add files using the command line](https://docs.gitlab.com/ee/gitlab-basics/add-file.html#add-a-file-using-the-command-line) or push an existing Git repository with the following command:
```
cd existing_repo
git remote add origin http://git.estancia-agape.com/hardware/hardware.git
git branch -M main
git push -uf origin main
```
## Integrate with your tools
- [ ] [Set up project integrations](http://git.estancia-agape.com/hardware/hardware/-/settings/integrations)
## Collaborate with your team
- [ ] [Invite team members and collaborators](https://docs.gitlab.com/ee/user/project/members/)
- [ ] [Create a new merge request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html)
- [ ] [Automatically close issues from merge requests](https://docs.gitlab.com/ee/user/project/issues/managing_issues.html#closing-issues-automatically)
- [ ] [Enable merge request approvals](https://docs.gitlab.com/ee/user/project/merge_requests/approvals/)
- [ ] [Automatically merge when pipeline succeeds](https://docs.gitlab.com/ee/user/project/merge_requests/merge_when_pipeline_succeeds.html)
## Test and Deploy
Use the built-in continuous integration in GitLab.
- [ ] [Get started with GitLab CI/CD](https://docs.gitlab.com/ee/ci/quick_start/index.html)
- [ ] [Analyze your code for known vulnerabilities with Static Application Security Testing(SAST)](https://docs.gitlab.com/ee/user/application_security/sast/)
- [ ] [Deploy to Kubernetes, Amazon EC2, or Amazon ECS using Auto Deploy](https://docs.gitlab.com/ee/topics/autodevops/requirements.html)
- [ ] [Use pull-based deployments for improved Kubernetes management](https://docs.gitlab.com/ee/user/clusters/agent/)
- [ ] [Set up protected environments](https://docs.gitlab.com/ee/ci/environments/protected_environments.html)
***
# Editing this README
When you're ready to make this README your own, just edit this file and use the handy template below (or feel free to structure it however you want - this is just a starting point!). Thank you to [makeareadme.com](https://www.makeareadme.com/) for this template.
## Suggestions for a good README
Every project is different, so consider which of these sections apply to yours. The sections used in the template are suggestions for most open source projects. Also keep in mind that while a README can be too long and detailed, too long is better than too short. If you think your README is too long, consider utilizing another form of documentation rather than cutting out information.
## Name
Choose a self-explaining name for your project.
## Description
Let people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of Features or a Background subsection can also be added here. If there are alternatives to your project, this is a good place to list differentiating factors.
## Badges
On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use Shields to add some to your README. Many services also have instructions for adding a badge.
## Visuals
Depending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see GIFs rather than actual videos). Tools like ttygif can help, but check out Asciinema for a more sophisticated method.
## Installation
Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a Requirements subsection.
## Usage
Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README.
## Support
Tell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address, etc.
## Roadmap
If you have ideas for releases in the future, it is a good idea to list them in the README.
## Contributing
State if you are open to contributions and what your requirements are for accepting them.
For people who want to make changes to your project, it's helpful to have some documentation on how to get started. Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps explicit. These instructions could also be useful to your future self.
You can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce the likelihood that the changes inadvertently break something. Having instructions for running tests is especially helpful if it requires external setup, such as starting a Selenium server for testing in a browser.
## Authors and acknowledgment
Show your appreciation to those who have contributed to the project.
## License
For open source projects, say how it is licensed.
## Project status
If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers.

Binary file not shown.

After

Width:  |  Height:  |  Size: 311 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

View File

@@ -0,0 +1,4 @@
4898: 11 00 EE 00 E2 80 11 71 00 00 02 0D 5C 33 9A 76 6E 4C
4899: 11 00 EE 00 E2 80 11 71 00 00 02 0D 5C 33 4A 83 77 B3
X: 11 00 EE 00 E2 00 00 19 92 16 02 48 23 60 D9 F4 38 90

11
hardware/RFID/passwd.txt Normal file
View File

@@ -0,0 +1,11 @@
Please find below software download link.
The unzip password is “pegasus0502”.
http://125.227.190.111/software/PK-UHF101EU(201EU).zip

View File

@@ -0,0 +1,30 @@
Nummer Nutzer Antenne PCB Software Bemerkung
000 Prototyp KEINE REV 1 1.0 Dev Only
001 AGAPEI Tawian Rev 1 1.0 RETROFIT BOX + HUT + PG Klein + PG GRoss + PG Klein + Halter + Klemmblock
002 AGAPE Taiwan Rev 1 1.0 gesägte PCB Halter
nicht fertig:
003 AGAPEY China Rev 1 1.0 gesägte PCB Halter - Fehlt: Klemmblock + Verkabelung
004 FREI China Rev 1 1.0 Fehlt:PCB Halter+ Klemblock + Verkabelung+ PG Klein
005 FREI China Rev 1 1.0 Fehlt:PCB Halter+ Klemblock + Verkabelung+PG Klein
006 Frei Fehlt Rev 1 1.0 Fehlt:PCB Halter+ Klemblock + Verkabelung + Box+ PG Klein
007 Frei Fehlt Rev 1 1.0 Fehlt:PCB Halter+ Klemblock + Verkabelung + Box+ PG Klein+Hutschien
008 Frei Fehlt Rev 1 1.0 Fehlt:PCB Halter+ Klemblock + Verkabelung + Box+ PG Klein+hut
009 Frei Fehlt Rev 1 1.0 Fehlt:PCB Halter+ Klemblock + Verkabelung + Box+ PG Klein+hut
Fehlteile
Klemmblock x8
PCB Halter x7 (zum Wechsel insgeamt 10x)
PG klein x7
PG groß x7
BOX x5
Hutschine x4
Hardware Verbesserungen
PCB: Löcher zum Schrauben grösser
PCB: Passend zum ESP32
Geschraubte PCB halter

14
hardware/stückliste.txt Normal file
View File

@@ -0,0 +1,14 @@
1x Antenne
1x PG M12x15
1x PG M16x15
1x PCB
1x ESP32
1x 4x Klemmblock
1x Hutschiene 7 Löcher ~18,8
2x Schrauben Grundblech
1x Label
1x 200x200x80 Gehäuse Ohne Gummi
1x PCB Halter Hutschiene
Kleber
Kabelbinder breit