Files
Hotdog/Hotdog.ino

119 lines
2.9 KiB
C++

#include "arduino_secrets.h"
#include "HDPacketBuilder.h"
#include <EspMQTTClient.h>
#include <RF24.h> // library by TMRh20
#define SER_BAUDRATE (115200)
// pins for: esp8266 NodeMCU v3 dev board
#define RF_CE_PIN (5) // pins for: esp
#define RF_CS_PIN (15) // pins for: esp
#define RF_IRQ_PIN (4) // run a jumper from IRQ pin to pin 2
EspMQTTClient client(
SECRET_WIFI_SSID, // Wifi SSID
SECRET_WIFI_PASSWORD, // Wifi Password
SECRET_MQTT_SERVER_IP, // MQTT Broker server IP
SECRET_MQTT_USERNAME, // MQTT Username
SECRET_MQTT_PASSWORD, // MQTT Password
"hotdog", // MQTT Client ID
1883
);
byte addr[3] = { 0xC0, 0xC8, 0x2E }; // The address was captured as "2EC8C0" and the bytes were reversed
RF24 radio(RF_CE_PIN, RF_CS_PIN);
void setup() {
for (int i = 0; i < 32; i++) {
buf[i] = 0x00;
}
Serial.begin(SER_BAUDRATE);
client.setKeepAlive(10);
client.enableLastWillMessage("hotdog/availability", "offline", true);
client.enableDebuggingMessages();
radio.begin();
radioTransmitSetup();
for (int i = 0; i < 32; i++) {
buf[i] = 0x00;
}
Serial.println("Ready");
}
void onConnectionEstablished() {
client.subscribe("hotdog/test_mqtt_blind/set", [] (const String &payload) {
Serial.print("Set on test_mqtt_blind: ");
Serial.println(payload);
if (payload == "OPEN") {
constructUpPacket();
printBuffer();
sendCommand(buf);
} else if (payload == "CLOSE") {
constructDownPacket();
printBuffer();
sendCommand(buf);
} else if (payload == "STOP") {
constructStopPacket();
printBuffer();
sendCommand(buf);
}
});
client.subscribe("hotdog/test_mqtt_blind/set_position", [] (const String &payload) {
Serial.print("Set position on test_mqtt_blind: ");
Serial.println(payload);
});
client.publish("hotdog/availability", "online", true);
}
void loop() {
client.loop();
}
void radioTransmitSetup() {
radio.stopListening();
radio.powerDown();
radio.begin();
delay(100);
Serial.println();
radio.setChannel(0x07); //shooting for 2.407 GHz
radio.setDataRate(RF24_1MBPS); //can go at 250kbs, 1Mbs, 2Mbs
radio.setPALevel(RF24_PA_HIGH); //transmit power
radio.disableCRC();
radio.setAutoAck(false);
radio.setAddressWidth(3);
radio.setRetries(0, 0);
radio.openWritingPipe(addr);
radio.powerUp();
//radio.printDetails();
//radio.printPrettyDetails();
Serial.println("Ready to Transmit");
}
void sendCommand(byte * byteArray) //transmit a command
{
uint8_t bytecount = byteArray[0] + 3;
for (int j = 1; j < 5; j++) {
radio.setAddressWidth(3);
radio.disableCRC();
radio.setAutoAck(false);
radio.openWritingPipe(addr);
for (int i = 1; i < 200; i++) {
radio.writeFast(byteArray, bytecount);
}
delay(500);
radio.flush_tx();
radio.txStandBy();
}
rollingCode1++;
rollingCode2++;
}