Hi
I am trying to build my code but I get an error saying:
collect2: error: ld returned 1 exit status
*** [.pioenvs/esp01_1m/firmware.elf] Error 1
I have update the platform arduinoespressif8266 to latest one but still get the same error.
my main.ino file is :
/*
* IRremoteESP8266: IRServer - MQTT IR server
* An IR LED must be connected to ESP8266 RX port (GPIO-3)
* An IR receiver to GPIO 0
* used library:
* https://github.com/markszabo/IRremoteESP8266
*/
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <IRremoteESP8266.h>
#include <PubSubClient.h>
int RECV_PIN = 0; //an IR detector/demodulator is connected to GPIO pin 0
IRrecv irrecv(RECV_PIN);
const char* ssid = “XXXX";
const char* password = “XXXX";
const char* topicRaportPrefix = "esp8266/02/info/";
const char* topicSubscribe = "esp8266/02/sender/#";
const char* topicPrefix = "esp8266/02/";
const char* mqtt_server = “XXXX";
const char* mqtt_user = “XXXX";
const char* mqtt_pass = “XXXX";
String clientName; // MQTT client name
char message_buff[100];
// Pin of IR sender
IRsend irsend(3); // rx port z RS232
WiFiClient wifiClient;
void callback(char* topic, byte* payload, unsigned int length);
void connect_to_MQTT();
PubSubClient client(mqtt_server, 1883, callback, wifiClient);
// -----------------------------------------------------------------
void callback(char* topic, byte* payload, unsigned int length) {
int i = 0;
Serial.println("Message arrived: topic: " + String(topic));
Serial.println("Length: " + String(length,DEC));
// create character buffer with ending null terminator (string)
for(i=0; i<length; i++) {
message_buff[i] = payload[i];
}
message_buff[i] = '\0';
unsigned int freq=38;
String msgString = String(message_buff);
String msgTopic = String(topic);
unsigned long msgInt = msgString.toInt();
Serial.println("Payload String: " + msgString);
// structure "esp8266/02/sender/type[/bits[/panasonic_address]]"
int endOfBits;
String irTypStr = "";
String irBitsStr = "";
int irBitsInt=-1;
String irPanasAddrStr = "";
int endOfTyp = msgTopic.indexOf("/",20);
if (endOfTyp == -1)
{
// One element - only irTyp
irTypStr = msgTopic.substring(18);
} else {
// irTyp exists and something more
irTypStr = msgTopic.substring(18, endOfTyp);
endOfBits = msgTopic.indexOf("/",endOfTyp+1);
if (endOfBits== -1)
{
// irBits is last
irBitsStr = msgTopic.substring(endOfTyp+1);
} else {
// irBits and something more
irBitsStr = msgTopic.substring(endOfTyp+1, endOfBits);
irPanasAddrStr = msgTopic.substring(endOfBits+1);
}
irBitsInt = irBitsStr.toInt();
}
Serial.println(irTypStr);
Serial.println(irBitsStr);
Serial.println(irPanasAddrStr);
if (irTypStr=="NEC") {
Serial.print("Send NEC:");
Serial.println(msgInt);
irsend.sendNEC(msgInt, 36);
} else if (irTypStr=="RC5") {
Serial.print("Send RC5:");
Serial.print(msgInt);
Serial.print(" (");
Serial.print(irBitsInt);
Serial.println("-bits)");
irsend.sendRC5(msgInt, irBitsInt);
}
}
// -----------------------------------------------------------------
String macToStr(const uint8_t* mac)
{
String result;
for (int i = 0; i < 6; ++i) {
result += String(mac[i], 16);
if (i < 5)
result += ':';
}
return result;
}
// -----------------------------------------------------------------
void setup(void){
irsend.begin();
irrecv.enableIRIn(); // Start the receiver
Serial.begin(115200,SERIAL_8N1,SERIAL_TX_ONLY);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.println("");
// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
clientName += "esp8266-";
uint8_t mac[6];
WiFi.macAddress(mac);
clientName += macToStr(mac);
clientName += "-";
clientName += String(micros() & 0xff, 16);
connect_to_MQTT();
}
// -----------------------------------------------------------------
void connect_to_MQTT() {
Serial.print("Connecting to ");
Serial.print(mqtt_server);
Serial.print(" as ");
Serial.println(clientName);
char myTopic[100];
int is_conn = 0;
while (is_conn == 0) {
if (client.connect((char*) clientName.c_str(), mqtt_user, mqtt_pass)) {
Serial.println("Connected to MQTT broker");
sprintf(myTopic, "%sclient", topicRaportPrefix);
client.publish((char*)myTopic, (char*) clientName.c_str());
IPAddress myIp = WiFi.localIP();
char myIpString[24];
sprintf(myIpString, "%d.%d.%d.%d", myIp[0], myIp[1], myIp[2], myIp[3]);
sprintf(myTopic, "%sip", topicRaportPrefix);
client.publish((char*)myTopic, (char*) myIpString);
sprintf(myTopic, "%stype", topicRaportPrefix);
client.publish((char*)myTopic,"IR server");
Serial.print("Topic is: ");
Serial.println(topicSubscribe);
if (client.subscribe(topicSubscribe)){
Serial.println("Successfully subscribed");
}
is_conn = 1;
}
else {
Serial.print("MQTT connect failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
}
}
// -----------------------------------------------------------------
// Encodig of data
void encoding (decode_results *results, char * result_encoding)
{
switch (results->decode_type) {
default:
case UNKNOWN: strncpy(result_encoding,"UNKNOWN\0",8); break ;
case NEC: strncpy(result_encoding,"NEC\0",4); break ;
case SONY: strncpy(result_encoding,"SONY\0",5); break ;
case RC5: strncpy(result_encoding,"RC5\0",4); break ;
case RC6: strncpy(result_encoding,"RC6\0",4); break ;
case DISH: strncpy(result_encoding,"DISH\0",5); break ;
case SHARP: strncpy(result_encoding,"SHARP\0",6); break ;
case JVC: strncpy(result_encoding,"JVC\0",4); break ;
case SANYO: strncpy(result_encoding,"SANYO\0",6); break ;
case MITSUBISHI: strncpy(result_encoding,"MITSUBISHI\0",11); break ;
case SAMSUNG: strncpy(result_encoding,"SAMSUNG\0",8); break ;
case LG: strncpy(result_encoding,"LG\0",3); break ;
case WHYNTER: strncpy(result_encoding,"WHYNTER\0",8); break ;
case PANASONIC: strncpy(result_encoding,"PANASONIC\0",11); break ;
}
}
// -----------------------------------------------------------------
void loop(void){
client.loop();
if (! client.connected()) {
Serial.println("Not connected to MQTT....");
connect_to_MQTT();
}
decode_results results; // Somewhere to store the results
if (irrecv.decode(&results)) { // Grab an IR code
char myTopic[100];
char myTmp[50];
char myValue[500];
encoding (&results, myTmp);
if (results.decode_type == PANASONIC) { //Panasonic has address
// struktura "prefix/typ/bits[/panasonic_address]"
sprintf(myTopic, "%sreceiver/%s/%d/%d", topicPrefix, myTmp, results.bits, results.panasonicAddress );
} else {
sprintf(myTopic, "%sreceiver/%s/%d", topicPrefix, myTmp, results.bits );
}
if (results.decode_type != UNKNOWN) {
// any other has code and bits
sprintf(myValue, "%d", results.value);
client.publish((char*) myTopic, (char*) myValue );
}
irrecv.resume(); // Prepare for the next value
}
}
Can someone please help?
Thanks.