In dieser Anleitung erfahren Sie, wie Sie den ESP32-C3 von CodeCell so konfigurieren, dass er als WLAN-Fernbedienung zur Kommunikation zwischen zwei Geräten verwendet werden kann.
In diesem Beispiel werden wir zwei CodeCell- Geräte koppeln. Gerät 1 sammelt Sensordaten und sendet sie über WLAN mithilfe des ESP-NOW-Protokolls an Gerät 2. Wir beginnen mit einem einfachen Setup, bei dem der Näherungssensor auf Gerät 1 die integrierte LED auf Gerät 2 steuert. Im zweiten Beispiel sendet Gerät 1 Winkeldaten und Gerät 2 verarbeitet die Daten, um die Motordrehzahl anzupassen.
Bevor Sie eine Kommunikation zwischen den beiden CodeCell- Geräten herstellen können, müssen Sie zunächst die MAC-Adresse des Empfängers ermitteln. Diese MAC-Adresse wird im Code des Absenders verwendet, um sicherzustellen, dass das richtige Gerät die Daten empfängt.
Um die MAC-Adresse des Empfängers zu ermitteln, gehen Sie folgendermaßen vor:
XX:XX:XX:XX:XX:XX
ausgedruckt. Kopieren Sie diese Adresse, da Sie diese für den Absendercode benötigen.Dieses Beispiel zeigt, wie Näherungssensordaten von Gerät 1 an Gerät 2 gesendet werden, das die Daten zum Ein- oder Ausschalten der integrierten LED verwendet.
#include <esp_now.h>
#include <WiFi.h>
#include <CodeCell.h>
CodeCell myCodeCell;
uint8_t receiverMAC[] = { 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX }; // Replace with receiver's MAC address
void setup() {
Serial.begin(115200);
myCodeCell.Init(LIGHT); // Initializes Light Sensing
// Initialize WiFi in Station mode
WiFi.mode(WIFI_STA);
Serial.println(WiFi.macAddress());
// Initialize ESP-NOW
if (esp_now_init() != ESP_OK) {
Serial.println("Error initializing ESP-NOW");
return;
}
// Register peer
esp_now_peer_info_t peerInfo;
memcpy(peerInfo.peer_addr, receiverMAC, 6);
peerInfo.channel = 0;
peerInfo.encrypt = false;
if (esp_now_add_peer(&peerInfo) != ESP_OK) {
Serial.println("Failed to add peer");
return;
}
}
void loop() {
wenn (myCodeCell.Run()) {
uint16_t ProxRead = (myCodeCell.Light_ProximityRead()) >> 4; // Näherungswert abrufen und durch 16 dividieren
Serial.println(ProxRead);
esp_err_t Ergebnis = esp_now_send(receiverMAC, (uint8_t *)&ProxRead, sizeof(ProxRead));
wenn (Ergebnis == ESP_OK) {
Serial.println("Daten erfolgreich gesendet");
} anders {
Serial.println("Sendefehler");
}
}
}
#include <esp_now.h>
#include <WiFi.h>
#include <CodeCell.h>
CodeCell myCodeCell;
void setup() {
Serial.begin(115200);
myCodeCell.Init(LIGHT); // Initializes Light Sensing
// Initialize WiFi in Station mode
WiFi.mode(WIFI_STA);
Serial.println(WiFi.macAddress());
// Initialize ESP-NOW
if (esp_now_init() != ESP_OK) {
Serial.println("Error initializing ESP-NOW");
return;
}
// Register the receive callback
esp_now_register_recv_cb(onDataRecv);
}
// Receive callback function
void onDataRecv(const esp_now_recv_info *recvInfo, const uint8_t *incomingData, int len) {
uint16_t Remote_Wert;
memcpy(&Remote_Value, eingehende Daten, Größe von(Remote_Value));
Serial.println(Remote_Wert);
myCodeCell.LED(0, Remote_Value, 0); // Helligkeit der integrierten LED steuern
}
void schleife() {
// Hier gibt es nichts zu tun
}
In diesem zweiten Beispiel verbinden wir zwei Motoren mit zwei DriveCells mit dem Empfänger. Gerät 1 liest Winkeldaten von seinen Bewegungssensoren und sendet sie an Gerät 2, das die Geschwindigkeit der beiden Motoren basierend auf den empfangenen Daten anpasst.
Wenn Sie für dieses Beispiel unterschiedliche Geräte verwenden, denken Sie daran, die neue MAC-Adresse des Empfängers auszulesen und die Platzhalter-MAC-Adresse im Code des Absenders zu ersetzen.
#include <esp_now.h>
#include <WiFi.h>
#include <CodeCell.h>
CodeCell meineCodeCell;
uint8_t receiverMAC[] = {0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX}; // Ersetzen durch die MAC-Adresse des Empfängers
int Roll_Control = 0;
Gleitkommazahl Roll = 0,0;
Gleitkomma-Tonhöhe = 0,0;
Gleitkomma-Gieren = 0,0;
void setup() {
Seriell.begin(115200);
myCodeCell.Init(MOTION_ROTATION); // Bewegungserkennung initialisieren
// WiFi im Stationsmodus initialisieren
WiFi.Modus(WIFI_STA);
Serial.println(WiFi.macAddress());
// ESP-NOW initialisieren
wenn (esp_now_init() != ESP_OK) {
Serial.println("Fehler beim Initialisieren von ESP-NOW");
zurückkehren;
}
// Peer registrieren
esp_now_peer_info_t Peer-Info;
memcpy(peerInfo.peer_addr, Empfänger-MAC, 6);
peerInfo.channel = 0;
peerInfo.encrypt = falsch;
wenn (esp_now_add_peer(&peerInfo) != ESP_OK) {
Serial.println("Peer konnte nicht hinzugefügt werden");
zurückkehren;
}
}
void schleife() {
wenn (myCodeCell.Run()) {
myCodeCell.Motion_RotationRead(Rollen, Neigen, Gieren);
Rollen = Rollen + 180;
Rollen = (Rollen * 100) / 180;
Rollen = Einschränkung(Rollen, 0, 200) / 2;
Roll_Control = (uint8_t)Rollen;
Serial.println(Roll_Control);
esp_now_send(Empfänger-MAC, (uint8_t *)&Roll_Control, Größe von(Roll_Control));
}
}
#include <esp_now.h>
#include <WiFi.h>
#include <CodeCell.h>
#include <DriveCell.h>
#define IN1_pin1 2
#define IN1_pin2 3
#define IN2_pin1 5
#define IN2_pin2 6
CodeCell myCodeCell;
DriveCell Motor1(IN1_pin1, IN1_pin2);
DriveCell Motor2(IN2_pin1, IN2_pin2);
void setup() {
Serial.begin(115200);
myCodeCell.Init(LIGHT); // Initialize Light Sensing
Motor1.Init();
Motor2.Init();
// Initialize WiFi in Station mode
WiFi.mode(WIFI_STA);
Serial.println(WiFi.macAddress());
// Initialize ESP-NOW
if (esp_now_init() != ESP_OK) {
Serial.println("Error initializing ESP-NOW");
return;
}
// Register the receive callback
esp_now_register_recv_cb(onDataRecv);
}
void onDataRecv(const esp_now_recv_info *recvInfo, const uint8_t *incomingData, int len) {
int Roll_Speed = 0;
memcpy(&Roll_Speed, incomingData, sizeof(Roll_Speed));
if (Roll_Speed > 50) {
Motor1.Antrieb(1, Roll_Speed);
Motor2.Antrieb(1, Roll_Speed);
} anders {
Rollgeschwindigkeit = 100 - Rollgeschwindigkeit;
Motor1.Antrieb(0, Roll_Speed);
Motor2.Antrieb(0, Roll_Speed);
}
Serial.println(Roll_Speed);
}
void schleife() {
wenn (myCodeCell.Run()) {}
}
Anhand dieser Beispiele können Sie zwei CodeCell- Geräte so konfigurieren, dass sie mit ESP-NOW über WLAN kommunizieren. Die Beispiele zeigen, wie Sie Näherungs- und Winkeldaten zwischen Geräten senden und die Daten zur Echtzeitsteuerung von LEDs und Motoren nutzen können.
Erweitern Sie diese Projekte gerne durch die Integration weiterer Sensoren oder zusätzlicher Funktionen, um die Funktionalität Ihres Remote-Systems zu verbessern!
Erfahren Sie als Erster von neuen Projekten und sichern Sie sich spannende Angebote!
© 2024 Microbots.