I get this compiler error it seems in wire.h

and I dont know how to fix it if at all. It is part of my eternal quest to get SoftwareSerial to work. All help is appreciated.

In file included from /home/hexdump/Arduino/Sketchbooks/libraries/Adafruit_GPS_Library/Adafruit_GPS.h:57:0,
                 from /home/hexdump/Arduino/Sketchbooks/libraries/Adafruit_GPS_Library/Adafruit_GPS.cpp:31:
/home/hexdump/.arduino15/packages/esp8266/hardware/esp8266/2.6.3/libraries/Wire/Wire.h: In member function 'char Adafruit_GPS::read()':
/home/hexdump/.arduino15/packages/esp8266/hardware/esp8266/2.6.3/libraries/Wire/Wire.h:71:13: note: candidate 1: uint8_t TwoWire::requestFrom(int, int, int)
     uint8_t requestFrom(int, int, int);
             ^
/home/hexdump/.arduino15/packages/esp8266/hardware/esp8266/2.6.3/libraries/Wire/Wire.h:65:12: note: candidate 2: size_t TwoWire::requestFrom(uint8_t, size_t, bool)
     size_t requestFrom(uint8_t address, size_t size, bool sendStop);
            ^
/home/hexdump/.arduino15/packages/esp8266/hardware/esp8266/2.6.3/libraries/Wire/Wire.h:71:13: note: candidate 1: uint8_t TwoWire::requestFrom(int, int, int)
     uint8_t requestFrom(int, int, int);
             ^
/home/hexdump/.arduino15/packages/esp8266/hardware/esp8266/2.6.3/libraries/Wire/Wire.h:65:12: note: candidate 2: size_t TwoWire::requestFrom(uint8_t, size_t, bool)
     size_t requestFrom(uint8_t address, size_t size, bool sendStop);
            ^

SoftwareSerial does not work with an ESP8266. You need to get the EspSoftwareSerial library

hextejas:
I get this compiler error it seems in wire.h

Please post the full error. You cut off a useful part of it.

blh64:
SoftwareSerial does not work with an ESP8266. You need to get the EspSoftwareSerial library

The ESP8266 Core for Arduino now comes with the EspSoftwareSerial library bundled, renamed SoftwareSerial:

Thank you. The compiler error disappeared when I got the SoftwareSerial library sorted out.
The program still doesnt work but I am on the trail of a potential fix.
Without going into any details the examples can be a lot of confusion though there is one that I am following as it might be helpful.
Here it is and it is the only place that I have seen so far that equates the Digital pins D5, D6, etc to physical pins on the feather huzzah.
Though I dont think I understand these. I think that they say: to define D5 D6 D7 D8 if ESP8266 is already defined and D5 is not. Though I cannot see anywhere ESP8266 is defined so it seems like these local defines would not execute.
The syntax of swSer.begin looks odd, so I am gonna read more about it.

#if defined(ESP8266) && !defined(D5)
#define D5 (14)
#define D6 (12)
#define D7 (13)
#define D8 (15)
#endif

Complete example program is here and it is small.

// On ESP8266:
// At 80MHz runs up 57600ps, and at 160MHz CPU frequency up to 115200bps with only negligible errors.
// Connect pin 12 to 14.

#include <SoftwareSerial.h>

#if defined(ESP8266) && !defined(D5)
#define D5 (14)
#define D6 (12)
#define D7 (13)
#define D8 (15)
#endif

#ifdef ESP32
#define BAUD_RATE 57600
#else
#define BAUD_RATE 57600
#endif

// Reminder: the buffer size optimizations here, in particular the isrBufSize that only accommodates
// a single 8N1 word, are on the basis that any char written to the loopback SoftwareSerial adapter gets read
// before another write is performed. Block writes with a size greater than 1 would usually fail. 
SoftwareSerial swSer;

void setup() {
	Serial.begin(115200);
	swSer.begin(BAUD_RATE, SWSERIAL_8N1, D5, D6, false, 95, 11);

	Serial.println("\nSoftware serial test started");

	for (char ch = ' '; ch <= 'z'; ch++) {
		swSer.write(ch);
	}
	swSer.println("");
}

void loop() {
	while (swSer.available() > 0) {
		Serial.write(swSer.read());
		yield();
	}
	while (Serial.available() > 0) {
		swSer.write(Serial.read());
		yield();
	}

}

hextejas:
Here it is and it is the only place that I have seen so far that equates the Digital pins D5, D6, etc to physical pins on the feather huzzah.
Though I dont think I understand these. I think that they say: to define D5 D6 D7 D8 if ESP8266 is already defined and D5 is not. Though I cannot see anywhere ESP8266 is defined so it seems like these local defines would not execute.
The syntax of swSer.begin looks odd, so I am gonna read more about it.

#if defined(ESP8266) && !defined(D5)
#define D5 (14)
#define D6 (12)
#define D7 (13)
#define D8 (15)
#endif

This is a confusing thing about the ESP8266 boards. The ESP8266 Core for Arduino platform uses the GPIO numbers to reference the pins in the IO functions like digitalWrite(), pinMode(), etc. But some ESP8266 boards have pin labels written on the boards that don't match the GPIO numbers. To deal with that, constants are defined to match the pin labels to the GPIO numbers for these boards. For example, here is the pin mappings for the WeMos(LOLIN) D1 Mini:

static const uint8_t D0   = 16;
static const uint8_t D1   = 5;
static const uint8_t D2   = 4;
static const uint8_t D3   = 0;
static const uint8_t D4   = 2;
static const uint8_t D5   = 14;
static const uint8_t D6   = 12;
static const uint8_t D7   = 13;
static const uint8_t D8   = 15;
static const uint8_t RX   = 3;
static const uint8_t TX   = 1;

It's confusing because on all other Arduino boards if you want to set the pin marked "2" to OUTPUT mode, you would do this:

pinMode(2, OUTPUT);

but on the WeMos D1 Mini, that will set the pin marked "4" to output mode! So instead you would need to do this:

pinMode(D2, OUTPUT);

The Adafruit Feather Huzzah doesn't do anything silly like that. The numbers marked on the board are the GPIO number, so the ESP8266 core for Arduino doesn't define any pin mapping constants when you have Tools > Board > Adafruit Feather HUZZAH ESP8266 selected.

hextejas:
I cannot see anywhere ESP8266 is defined

It's defined via a compilation command option:

build.extra_flags=-DESP8266

...

## Compile c++ files
recipe.cpp.o.pattern="{compiler.path}{compiler.cpp.cmd}" {compiler.cpreprocessor.flags} {compiler.cpp.flags} -D{build.sdk}=1 -DF_CPU={build.f_cpu} {build.lwip_flags} {build.debug_port} {build.debug_level} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} -DARDUINO_BOARD="{build.board}" {build.led} {build.flash_flags} {compiler.cpp.extra_flags} {build.extra_flags} {includes} "{source_file}" -o "{object_file}"

The ESP8266 macro provides a convenient way for code to detect when it is being compiled for ESP8266.

Even when you are compiling for one of the boards that has the Dn pin mapping constants, they are not macros, so the D5 macro would only be defined if you had previously defined it in your own code. For this reason, that preprocessor conditional will evaluate to true anytime you are compiling for an ESP8266 board.

My opinion is this code will only cause confusion. I can't imagine any application where this would be useful. I recommend you refer to the pins on your ESP8266 board using the numbers written on the board.

Thank you pert, that is more useful than you can imagine. I would be overjoyed to be able to use the pin numbers that are marked on the Huzzah board but, the example program calls for digital pins 7 and 8 which are not marked anywhere.
Hence my quest to sort this out.
Eventually I will figure it out. :frowning: