Hardware και σύνδεση ασυρμάτου
Τι χρειάζεσαι για να συνδέσεις το τηλέφωνο με τον ασύρματο, και πώς το κάνεις.
Πώς συνδέεται
Το τηλέφωνο δεν συνδέεται με καλώδιο στον ασύρματο. Μια μικρή φορητή γέφυρα κάθεται ανάμεσα: από τη μία πλευρά μιλά Bluetooth στο Android, από την άλλη μιλά RS-232 στη σειριακή θύρα του ασυρμάτου. Η διάταξη έχει σχεδιαστεί, κατασκευαστεί και δοκιμαστεί σε κατάλληλο ασύρματο.
Συμβατοί ασύρματοι
| Ασύρματος | Κατάσταση | Σχόλιο |
|---|---|---|
| Κατάλληλος ασύρματος με σειριακή θύρα (αυτός της δοκιμής) | δοκιμασμένος | Επιτυχής ανταλλαγή δεδομένων με τη γέφυρα ESP32. |
| Άλλος ασύρματος με Data Mode | μη επαληθευμένος | Χρειάζεται σειριακή θύρα και λειτουργία μετάδοσης δεδομένων. Έλεγξε τα επίπεδα τάσης και την ταχύτητα της θύρας. |
Για την ανάπτυξη χρησιμοποιείται κατάλληλος ασύρματος, που έχει σειριακή θύρα και ανταλλάσσει δεδομένα στα 9600 baud. Ο ασύρματος χειρίζεται τα δεδομένα μόνος του, χωρίς πρόσθετες ρυθμίσεις από τον χρήστη. Το αν χρειάζεται straight καλώδιο ή Null Modem εξαρτάται από το αν η θύρα του ασυρμάτου λειτουργεί ως DTE ή DCE. Η σωστή επιλογή προκύπτει από το εγχειρίδιο του εκάστοτε ασυρμάτου.
Σύνδεση και έλεγχος ροής
Ο προσαρμογέας IRIS 1 δοκιμάστηκε με ασύρματο που χρησιμοποιεί σειριακή θύρα με τρία καλώδια: TX, RX και GND, στα 9600 baud (8N1). Η συγκεκριμένη σύνδεση δεν διαθέτει σήματα ελέγχου ροής, οπότε η αποστολή των δεδομένων ρυθμίζεται από την εφαρμογή, που στέλνει σε ρυθμό που ταιριάζει με την ταχύτητα της σειριακής γραμμής και επιβεβαιώνει την παράδοση με CRC και ACK.
Ο προσαρμογέας μπορεί να προσαρμοστεί και για ασυρμάτους που χρησιμοποιούν έλεγχο ροής (RTS/CTS) ή σήματα κατάστασης (DTR/DSR). Αυτό απαιτεί αλλαγή εξοπλισμού, δηλαδή μετατροπέα στάθμης με περισσότερα κανάλια από το MAX3232 που χρησιμοποιείται σήμερα (π.χ. MAX3243), καθώς και αντίστοιχη ρύθμιση του firmware. Λειτουργεί μόνο εφόσον ο ασύρματος υποστηρίζει αυτά τα σήματα και τα χρησιμοποιεί με τον τρόπο που περιγράφει το εγχειρίδιό του.
Δεν έχει δοκιμαστεί. Η λειτουργία με έλεγχο ροής δεν έχει δοκιμαστεί ακόμη. Πριν τη σύνδεση με οποιονδήποτε ασύρματο, έλεγξε στο εγχειρίδιό του τι κάνουν οι ακροδέκτες της σειριακής θύρας, γιατί σε ορισμένα μοντέλα οι γραμμές RTS/DTR μπορεί να ελέγχουν τον πομπό.
Ο προσαρμογέας IRIS 1
Η γέφυρα λέγεται IRIS 1 και εμφανίζεται στο τηλέφωνο ως συσκευή Bluetooth με αυτό το όνομα. Δεν ερμηνεύει τα δεδομένα. Ό,τι στέλνει η εφαρμογή περνά ως σειριακή ροή προς τον ασύρματο, και ό,τι λαμβάνει ο ασύρματος επιστρέφει στην εφαρμογή. Φτιάχνεται από φθηνά εξαρτήματα της αγοράς.
Λειτουργικό πρωτότυπο. Η διάταξη δουλεύει με κατάλληλο ασύρματο, αλλά η ανάπτυξη συνεχίζεται.
Εξαρτήματα και κόστος
Ενδεικτικές τιμές λιανικής (eBay, AliExpress, καταστήματα ηλεκτρονικών), 2026. Οι φωτογραφίες των εξαρτημάτων είναι ενδεικτικές.

ESP32 DevKit
ESP32-WROOM-32D, USB-CBluetooth Classic SPP προς το τηλέφωνο και UART2 προς τον μετατροπέα. Τροφοδοσία και προγραμματισμός από το USB-C.
≈ 6 – 10 €
HW-707
MAX3232Μετατρέπει τα λογικά επίπεδα 3,3 V του ESP32 σε επίπεδα RS-232 και αντίστροφα.
≈ 2 – 4 €
Προσαρμογέας DB9
Null Modem / gender changerΔιορθώνει το φύλο της θύρας και, αν χρειάζεται, σταυρώνει TX και RX, ανάλογα με το αν ο ασύρματος είναι DTE ή DCE.
≈ 2 – 5 €
Κουτί 3D εκτύπωσης
PLA ή PETG, 2 κομμάτιαΣτεγάζει τα δύο boards. Άνοιγμα για το USB-C πίσω και για το DB9 μπροστά. Τα αρχεία STL είναι πιο κάτω.
≈ 1 – 3 €
Τροφοδοσία και καλώδια
Power bank, USB-C, DupontΟποιαδήποτε πηγή 5 V με USB. Καλώδια Dupont και θερμοκόλλα για τις συνδέσεις.
≈ 2 – 4 € (χωρίς power bank)Συνολικό εκτιμώμενο κόστος≈ 13 – 26 €
Συνδεσμολογία
Συνδέονται μόνο TX, RX, GND και τροφοδοσία. Δεν οδηγούνται σήματα ελέγχου ροής (RTS/CTS, DTR/DSR).
| ESP32 | HW-707 (TTL) | Σημείωση |
|---|---|---|
GPIO17 (TX2) | RXD | Ο ESP32 στέλνει προς τον μετατροπέα |
GPIO16 (RX2) | TXD | Ο ESP32 λαμβάνει από τον μετατροπέα |
GND | GND | Κοινή γείωση |
3V3 | VCC | Τροφοδοσία του module στα 3,3 V |
Τροφοδότησε το HW-707 στα 3,3 V, όχι στα 5 V. Το GPIO16 του ESP32 δεν ανέχεται 5 V. Αν ο MAX3232 τροφοδοτηθεί με 5 V, η έξοδος TXD του φτάνει σε επίπεδο που μπορεί να καταστρέψει τον ESP32. Ο MAX3232 λειτουργεί κανονικά από 3,0 έως 5,5 V.
Παράμετροι
| Όνομα Bluetooth | IRIS 1 |
| Σειριακή (RS-232) | 9600 baud, 8 bit, χωρίς parity, 1 stop bit (8N1) |
| Ονομαστική ροή | περίπου 960 bytes/s προς κάθε κατεύθυνση |
| Buffers UART2 | 4096 bytes RX και 4096 bytes TX |
| Μεταφορά ανά κύκλο | 256 bytes |
| Λογική στάθμη | 3,3 V |
Δεν υπάρχει έλεγχος ροής. Το Bluetooth είναι πολύ πιο γρήγορο από τα 9600 baud. Αν η εφαρμογή στείλει μεγάλο όγκο απότομα, οι buffers γεμίζουν (4096 bytes χρειάζονται περίπου 4 δευτερόλεπτα για να αδειάσουν) και τα επιπλέον bytes χάνονται χωρίς ένδειξη σφάλματος.
Η εφαρμογή τεμαχίζει κάθε μήνυμα σε frames με payload έως 255 bytes και CRC16 (έως περίπου 265 bytes ανά frame), αλλά δεν επιβραδύνει τον ρυθμό αποστολής. Στείλε μικρά μηνύματα και, για αρχεία, περίμενε ότι ένα αρχείο 60 KB θέλει τουλάχιστον ένα λεπτό.
Firmware του ESP32
Το ίδιο firmware τρέχει σε κάθε προσαρμογέα. Αν φτιάξεις περισσότερους από έναν, άλλαξε μόνο το BT_DEVICE_NAME ώστε να ξεχωρίζουν στο pairing. Board: ESP32 Dev Module, με το Arduino-ESP32 core (το BluetoothSerial έρχεται ενσωματωμένο).
Δες τον κώδικα (124 γραμμές)
/*
* ============================================================================
* PC <-> PC Full-Duplex Bridge via Bluetooth SPP + RS-232
* ============================================================================
* Architecture:
* [PC] <-BT-> [ESP32] <-UART2 TTL (IO16/IO17)-> [HW-707/MAX3232] <-RS232-> ...
*
* Logic:
* - Whatever arrives over Bluetooth (i.e. from the computer) is written to Serial2
* (i.e. forwarded to the MAX3232 -> RS232 cable -> the other ESP32)
* - Whatever arrives on Serial2 (i.e. from the RS232 cable / the other ESP32) is
* written to Bluetooth (i.e. forwarded to the computer)
*
* The exact same sketch is uploaded to both ESP32s (only BT_DEVICE_NAME
* changes, so you can tell them apart when pairing).
*
* Pinout ESP32 (UART2 default):
* IO17 (TX2) -> RXD on the HW-707
* IO16 (RX2) -> TXD on the HW-707
* GND -> GND on the HW-707
* 3V3 -> VCC on the HW-707 (the module is powered at 3.3V).
*
* Board: "ESP32 Dev Module" (ESP32-WROOM-32)
* Requires: Arduino-ESP32 core (BluetoothSerial comes built in).
* ============================================================================
*/
#include "BluetoothSerial.h"
// ----------------------------------------------------------------------------
// Settings
// ----------------------------------------------------------------------------
// Change the name on each ESP32 so you can tell them apart when pairing
// e.g. "ESP32_BRIDGE_A" on the first, "ESP32_BRIDGE_B" on the second.
#define BT_DEVICE_NAME "IRIS 1"
// If you send "a lot" of data quickly and see data loss or stalls, the
// first suspect is this: BT SPP is much faster than the
// RS-232 serial line, so if your setup allows it (cable,
// MAX3232, and the other end), raise it, e.g. to 38400 or 115200 - less
// bottleneck = fewer losses. It must be the SAME on both ESP32s.
#define RS232_BAUD 9600
#define RXD2_PIN 16 // IO16 -> RX2 (receives from HW-707 TXD)
#define TXD2_PIN 17 // IO17 -> TX2 (sends to HW-707 RXD)
// Size of the intermediate buffer used to move data per loop() "cycle"
#define CHUNK_SIZE 256
// Larger internal buffers so that bursts of data are not lost while
// Serial2 (slower, 9600 baud) catches up and sends them out.
#define UART2_RX_BUFFER_SIZE 4096
#define UART2_TX_BUFFER_SIZE 4096
#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to enable it
#endif
BluetoothSerial SerialBT;
// ----------------------------------------------------------------------------
// Setup
// ----------------------------------------------------------------------------
void setup() {
// Serial (USB) only for debugging/monitoring via the Arduino IDE, optional.
Serial.begin(115200);
delay(200);
// We enlarge the buffers BEFORE begin() - otherwise it has no effect.
Serial2.setRxBufferSize(UART2_RX_BUFFER_SIZE);
Serial2.setTxBufferSize(UART2_TX_BUFFER_SIZE);
// UART2 to the MAX3232 (HW-707) -> RS232 -> the other ESP32
Serial2.begin(RS232_BAUD, SERIAL_8N1, RXD2_PIN, TXD2_PIN);
// Bluetooth SPP (Serial Port Profile) to the computer
SerialBT.begin(BT_DEVICE_NAME);
// On arduino-esp32 core >= 2.x there is also SerialBT.setRxBufferSize(size)
// (it must go BEFORE begin()). If your IDE finds it, uncomment:
// SerialBT.setRxBufferSize(4096);
Serial.println();
Serial.print("[BOOT] Bluetooth device started, name: ");
Serial.println(BT_DEVICE_NAME);
Serial.println("[BOOT] Serial2 (RS-232 bridge) started at " + String(RS232_BAUD) + " baud");
Serial.println("[BOOT] Bridge ready. Pair this ESP32 from the PC's Bluetooth settings,");
Serial.println("[BOOT] then open the resulting virtual COM port in a terminal.");
}
// ----------------------------------------------------------------------------
// Loop: bidirectional data forwarding
// ----------------------------------------------------------------------------
void loop() {
// ---- Direction 1: Bluetooth (PC) -> Serial2 (RS-232 -> the other ESP32) ----
if (SerialBT.available()) {
uint8_t buf[CHUNK_SIZE];
size_t n = 0;
while (SerialBT.available() && n < CHUNK_SIZE) {
buf[n++] = (uint8_t)SerialBT.read();
}
if (n > 0) {
Serial2.write(buf, n);
// Serial.write(buf, n); // <- uncomment for debug echo on the USB monitor
}
}
// ---- Direction 2: Serial2 (RS-232 <- the other ESP32) -> Bluetooth (PC) ----
if (Serial2.available()) {
uint8_t buf[CHUNK_SIZE];
size_t n = 0;
while (Serial2.available() && n < CHUNK_SIZE) {
buf[n++] = (uint8_t)Serial2.read();
}
if (n > 0) {
SerialBT.write(buf, n);
// Serial.write(buf, n); // <- uncomment for debug echo on the USB monitor
}
}
// No delay() needed - available()/read() are non-blocking and
// both directions are served in turn on every pass of loop(),
// effectively achieving full-duplex operation.
}Κατασκευή



Αρχεία STL για το κουτί
Δύο κομμάτια: το εξωτερικό κέλυφος και το εσωτερικό. Το κέλυφος έχει διαστάσεις περίπου 37 × 90 × 18 mm, όπως προκύπτει από το αρχείο. Προτεινόμενες ρυθμίσεις: PLA ή PETG, layer 0,2 mm, infill 20 %, χωρίς supports όπου είναι δυνατό.
Τροφοδοσία
Η συσκευή τροφοδοτείται από τη θύρα USB-C του ESP32. Ο σταθεροποιητής του board βγάζει τα 3,3 V για το ESP32 και το MAX3232, οπότε αρκεί οποιαδήποτε πηγή 5 V.
| Πηγή | Σχόλιο |
|---|---|
| Power bank | Η πιο πρακτική λύση για φορητή χρήση. Η κατανάλωση είναι περίπου 0,1 έως 0,25 A, άρα ένα power bank 5000 mAh κρατά πολλές ώρες. Κάποια power bank σβήνουν με πολύ χαμηλό ρεύμα, οπότε διάλεξε μοντέλο με λειτουργία «low current» ή «always on». |
| Φορτιστής USB | Οποιοσδήποτε φορτιστής κινητού 5 V (500 mA και πάνω) για σταθερή εγκατάσταση στον σταθμό. |
| Αναπτήρας αυτοκινήτου | Αντάπτορας 12 V σε USB για χρήση σε όχημα. Προτίμησε ποιοτικό αντάπτορα για λιγότερο θόρυβο κοντά στον ασύρματο. |
| Θύρα USB υπολογιστή | Τροφοδοτεί τη συσκευή και επιτρέπει προγραμματισμό και παρακολούθηση από το Serial Monitor. |
Σύνδεση βήμα προς βήμα
Σύνδεσε τη γέφυρα στον ασύρματο
Βάλε τη γέφυρα στη σειριακή θύρα του ασυρμάτου και τροφοδότησέ τη. Ο ασύρματος πρέπει να είναι σε λειτουργία μετάδοσης δεδομένων.
Κάνε ζεύξη στο Android, όχι μέσα στο IRIS 3
Άνοιξε τις ρυθμίσεις Bluetooth του τηλεφώνου και ζεύξε τη γέφυρα. Το IRIS 3 δείχνει μόνο συσκευές που έχουν ήδη ζευχθεί.
Δώσε άδεια Bluetooth
Αν η εφαρμογή ζητήσει άδεια Bluetooth, δέξου την. Χωρίς αυτήν δεν γίνεται καμία επικοινωνία.
Όρισε το Κλειδί Δικτύου
Ρυθμίσεις, ΚΛΕΙΔΙ ΔΙΚΤΥΟΥ, και πάτα Αποθήκευση Κλειδιού. Το ίδιο ακριβώς κλειδί πρέπει να υπάρχει σε κάθε συσκευή του δικτύου. Το κλειδί κρυπτογραφεί την επικοινωνία μέσω της γέφυρας.
Σύνδεση
Άνοιξε Σύνδεση Συσκευής, άνοιξε το πάνελ Bluetooth, διάλεξε τη γέφυρα από τις ΔΙΑΘΕΣΙΜΕΣ ΣΥΣΚΕΥΕΣ και πάτα ΣΥΝΔΕΣΗ. Η κατάσταση γίνεται ONLINE.
Δοκίμασε με Έλεγχο Δικτύου
Πάτα Έλεγχος Δικτύου. Κάθε άλλη συσκευή απαντά με το διακριτικό της και εμφανίζεται στο διάγραμμα.
Ενδείξεις κατάστασης
| ONLINE | Συνδεδεμένο. Η επικοινωνία λειτουργεί. |
| SYNC | Σύνδεση ή επανασύνδεση σε εξέλιξη. |
| OFFLINE | Αποσυνδεδεμένο. |
Το πάνελ ΤΕΛΕΥΤΑΙΑ ΣΥΣΚΕΥΗ θυμάται την τελευταία επιτυχημένη σύνδεση, για γρήγορη επανασύνδεση.
Αντιμετώπιση προβλημάτων
| Τι βλέπεις | Γιατί συμβαίνει | Τι κάνεις |
|---|---|---|
| Η γέφυρα λείπει από τη λίστα συσκευών | Δεν έχει γίνει ζεύξη στο Android. | Ζεύξε από τις ρυθμίσεις Bluetooth του Android και πάτα ΣΑΡΩΣΗ. |
| Δεν μπορώ να ανοίξω τη σύνδεση | Δεν έχει οριστεί Κλειδί Δικτύου. Το βήμα της σύνδεσης μένει κλειδωμένο. | Ρυθμίσεις, ΚΛΕΙΔΙ ΔΙΚΤΥΟΥ, Αποθήκευση Κλειδιού. |
| ONLINE, αλλά τα μηνύματα δεν φτάνουν | Το κλειδί διαφέρει έστω και σε μία συσκευή. Αποτυγχάνει σιωπηλά, χωρίς σφάλμα. | Ξαναδώσε το ίδιο ακριβώς κλειδί σε όλες τις συσκευές. |
| Το Κανάλι Β δεν είναι διαθέσιμο | Το πάνελ Bluetooth δεν είναι συνδεδεμένο. | Σύνδεσε πρώτα τη γέφυρα. |
| Κάποιος δεν απαντά στον Έλεγχο Δικτύου | Έχει ενεργή ραδιοσιγή (αυτόματη απάντηση OFF), είναι εκτός εμβέλειας, ή η απάντησή του άργησε. | Έλεγξε Ρυθμίσεις, ΕΛΕΓΧΟΣ ΔΙΚΤΥΟΥ, και επανάλαβε τον έλεγχο. Οι κόμβοι χωρίς γέμισμα είναι γνωστοί αλλά σιωπηλοί. |
| Μεγάλα μηνύματα φτάνουν ελλιπή, χωρίς σφάλμα | Δεν υπάρχει έλεγχος ροής. Το Bluetooth γεμίζει τους buffers των 4096 bytes πιο γρήγορα απ' όσο αδειάζουν στα 9600 baud. | Στείλε μικρότερα μηνύματα και περίμενε μεταξύ αποστολών. |
| Το αρχείο δεν στέλνεται | Είναι πάνω από 60 KB. | Μείωσε το μέγεθος. Αν χαθεί ένα κομμάτι, το αρχείο ξαναστέλνεται ολόκληρο, γι' αυτό το όριο μένει μικρό. |
| Η αλλαγή Baud Rate δεν κάνει τίποτα | Η τιμή αποθηκεύεται αλλά δεν εφαρμόζεται ακόμη στην ενεργή σύνδεση. | Μην τη χρησιμοποιείς για να αλλάξεις τον ρυθμό της γέφυρας. Η δοκιμασμένη διάταξη δουλεύει στα 9600. |
| Δεν βλέπω θέσεις άλλων στον χάρτη | Δεν έχουν ενεργοποιήσει Κοινοποίηση Θέσης, ή λείπει η άδεια Τοποθεσίας. | Ρυθμίσεις, ΖΩΝΤΑΝΗ ΘΕΣΗ, και έλεγχος αδειών στο ΑΔΕΙΕΣ. |

