Reference: RBD-1965
Banner

The ESP8266 Witty Cloud ESP-12F WiFi Module is a compact and versatile WiFi-enabled development board designed for IoT, automation, and sensor-based applications. Powered by the ESP8266 32-bit Tensilica processor running up to 160MHz, it offers 4MB flash memory, 11 digital I/O pins, and integrated WiFi 802.11 b/g/n connectivity. The board features a built-in RGB LED, LDR light sensor, and pushbutton, allowing easy testing and standalone functionality without extra components. Equipped with a CH340 USB-to-serial converter, it supports seamless programming through the Arduino IDE or NodeMCU firmware. Its modular dual-board structure enables users to detach the USB interface for embedded applications. Ideal for smart home, wireless data logging, or educational IoT development, the ESP8266 Witty Cloud ESP-12F combines flexibility, power, and ease of use in a single compact module. Featured By RoboticsBD.
Product Images are shown for illustrative purposes only and may differ from the actual product.
RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD
Powerful ESP8266 Processor: 32-bit Tensilica CPU running at 80/160MHz for fast, reliable performance.
Integrated WiFi Connectivity: Supports 802.11 b/g/n with station and access point modes.
Built-in Components: Includes RGB LED, LDR light sensor, and pushbutton for testing and control.
USB Communication & Power: CH340 interface with Micro-USB connection for programming and power.
Dual-Board Design: Detachable USB interface for flexible embedded use.
Wide Development Support: Works with Arduino IDE, NodeMCU, and AT command firmware.
High Memory Capacity: 4MB Flash, 64KB instruction RAM, and 96KB data RAM.
Compact & Lightweight: Only 32×32×17mm for portable IoT integration.
RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD
IoT & Smart Home Devices: Connect sensors, relays, and displays over WiFi.
Wireless Data Logging: Transmit environmental data to cloud platforms.
Educational Projects: Learn ESP8266 programming and IoT system design.
Prototyping: Develop and test WiFi-based embedded systems quickly.
Automation Systems: Implement wireless control in lighting, appliances, or security systems.
RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD
| General Specifications | |
| Microcontroller | ESP8266 Tensilica 32-bit |
| Clock Speed | 80 / 160 MHz |
| Operating Voltage | 3.3V |
| Input Voltage | 5V |
| Flash Memory | 4 MB |
| Digital I/O Pins | 11 (PWM supported on 10 pins) |
| Analog Input | 1 (10-bit ADC) |
| Max I/O Current | 12mA |
| USB Interface | CH340 (Micro-USB) |
| Built-in LED | Blue LED on GPIO2 |
| RGB LED Pins | R: GPIO15, G: GPIO12, B: GPIO13 |
| Pushbutton | GPIO4 |
| WiFi Standard | IEEE 802.11 b/g/n |
| RAM | Instruction: 64KB / Data: 96KB |
| Dimensions | 32 × 32 × 17 mm |
| Country of Origin | China |
| Shipment Weight | 0.028 kg |
| Shipment Dimensions | 5 × 5 × 3 cm |
Please allow 5% measuring deviation due to manual measurement.
RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD
All of the Digital I/O support PWM and interrupts except pin 16 which does not support interrupts. In addition they can be configured to have pull-up or pull-down resistors. Though there are 11 digital I/O pins, 2 are typically reserved for use as the TX/RX lines if serial communications are used which leaves 9 digital I/O for other uses. Some of these 9 pins are connected to the on-board LEDs, but can also be used for other purposes if needed.
PWM range by default is 0-1023 rather than the typical 0-255 found on Arduino. The range can be modified using the command analogWriteRange (255) which sets the range between 0-255.
The PWM frequency is 1kHz by default. Similarly it can be modified using the analogWriteFreq(500) to set the frequency to 500 Hz as one example.
The pins are labeled GPIOx. When using with Arduino IDE, the digital pin number is the samethe pin number, so GPIO2 is referenced as just ‘2’.
The small blue on-board LED is connected to pin 2 (GPIO2).
The on-board general purpose pushbutton on the top board is connected to pin 4 (GPIO4).
The RGB LED is common cathode and so lights when driven HIGH. It is connected to the following pins:
Per spec, the digital I/O is limited to 3.3V, but the mfr has made statements that the digital pins are in fact 5V tolerant and there are many installations using the module directly connected to the logic lines of 5V MCUs, so use your own judgment.
RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD
The analog input A0 (ADC) is a single 10-bit ADC input which is connected to the LDR (Light Dependent Resistor).
The LDR has a dark resistance of about 2.5K and is in series with a 470 ohm resistor to form a voltage divider that feeds the ADC input. The LDR is connected to the Vcc side of the voltage divider and the 470 ohm resistor connects to ground. As the light intensity increases, the LDR resistance decreases and therefore the voltage on the ADC input increases.
By measuring the voltage, the relative brightness of the light falling on the sensor can be determined.
RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD
The module can be powered via the USB port on either the top or bottom board or by using an external 5V power supply connected to the Vcc pin.
The top module includes a 3.3V regulator which regulates the 5V down to the 3.3V required by the ESP8266.
RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD
The board uses the CH340 chip on the bottom board for USB communications, so the bottom USB must be used for programming or communicating with the module.
If you have any issues with connecting to the board, you may need to download a driver for the CH340. Just search for Arduino CH340 driver and you will find a number of sources for drivers depending on what Windows or Mac operating system you are using.
The module comes preloaded with the NodeMCU software that accepts the standard AT command set.
It also can be programmed in C using the Arduino IDE and is how the modules are most often used. An example program is shown down below. If a program is download via the IDE, it will overwrite the NodeMCU software or whatever else was loaded before. If that is a problem for what you want to do, the NodeMCU software can always be reloaded.
There are many instructions for installing and using ESP8266 based boards with the Arduino IDE, but here is a short-hand version. Note that once the ESP8266 board type is added to the IDE, there will be many more items added to the Tools drop down menu.
Open Preferences window and enter the following into the ‘Additional Board Manager URLs’ field: “http://arduino.esp8266.com/stable/package_esp8266com_index.json“.
Under Boards Manager, install ESP8266 by ESP8266 Community.
Under Tools/Boards select “Adafruit Feather HUZZAH ESP8266“.
Set Upload Speed to “115200“.
Select the port that the board is attached to. In my case it happened to be COM3
In the Serial Monitor window, set comm rate to 115200 and line ending to Both NL & CR
Here is what it looks like on my setup.

To test whether the board is basically working and you can communicate with it using the preloaded NodeMCU software, you can open a Serial Monitor Window and simply enter ‘AT‘ into the serial monitor top window and hit ENTER. The board should return with ‘OK‘. That indicates the board is alive and the setup is working.
If you don’t get the OK:
RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD
These modules have good overall build quality.
RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD
The micro USB connector has a very small footprint and solder pads which makes it popular for small MCUs where space is limited. As with any MCU that uses the micro USB connector, some care should be taken not to put excessive strain on the USB cable or it is possible for the connector to be dislodged from the board.
The Witty Cloud (and ESP8266 processors in general ) have a couple of software quirks to be aware of compared to working with a standard Arduino.
First is that the compile and download time when using the IDE tends to be longer than for typical Arduino boards. This is especially true the first time a program is compiled or if the build options are changed which require a complete recompile. Subsequent compiles do run faster.
The second thing is that the module does not like long delays in code and it may cause the module to do a watchdog software reset. This is because the module has a network stack to handle the WiFi and that needs to be serviced regularly by the processor. An example of what not to do would be using something like a tight DO/WHILE loop waiting for a button to be pressed.
For instance in the example program down below, if you were to check the button using code like this which blocks the program until the button is pushed, you will run into this problem as it does not allow any free time for the processor to go off and reset the watchdog timer on occasion, so it thinks it has locked up and resets itself.
Do { btn_Status = digitalRead (BUTTON_PIN) } while (btn_Status == HIGH)
If the module keeps resetting every couple of seconds, look for this blocking type of issue in your code. This can be resolved by inserting the yield() function into the loop as that function lets the processor go off and take care of other business before returning to the loop.
Using the delay() function does not create the same blocking issue because the delay() function internally calls the yield() function every so often.
RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD
The program below is based on one of the sample programs ‘WiFiScan’ that is available once the ESP8266 boards are loaded into the IDE. It sends the list of networks found to the Serial Monitor window.
The version here uses the built-in pushbutton to initiate the scan for any available WiFi networks and turns on the on-board LED while a scan is in process. It also monitors the light level on the LDR and adjusts the brightness of the RGB green LED based on the amount of light that the LDR sensor is detecting. If you put your finger on the LDR, the RGB LED should go out.
The only connection that needs to be made is the USB cable to the USB connector on the bottom board. Ensure HUZZAH ESP8266 is selected as the board type in the IDE and the correct COM port is selected. Once the program is downloaded, open the Serial Monitor window and ensure that the baud rate is set to 115200. Once you press the pushbutton on the edge of the top board, a scan of the available WiFi networks will be displayed.

RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD
/* This sketch demonstrates how to scan for available WiFi networks. A button input is used to initiate the scan and the on-board LED is lit to indicate when a scan is in process On each loop, also check the analog input connected to the LDR and adjust the brightness of the RGB Green LED to match the measured brightness. */ #include "ESP8266WiFi.h" const int BUTTON_PIN = 4; // Define pin the button is connected to const int ON_BOARD_LED = 2; // Define pin the on-board LED is connected to const int RGB_G_PIN = 12; // RGB Green LED const int LDR_PIN = A0; // Define the analog pin the LDR is connected to //=============================================================================== // Initialization //=============================================================================== void setup() { pinMode(ON_BOARD_LED, OUTPUT); // Initialize the LED_BUILTIN pin as an output pinMode(BUTTON_PIN, INPUT_PULLUP); // Initialize button pin with built-in pullup. digitalWrite(ON_BOARD_LED, HIGH); // Ensure LED is off Serial.begin(115200); // Set comm rate to 115200 // Set WiFi to station mode and disconnect from an AP if it was previously connected WiFi.mode(WIFI_STA); WiFi.disconnect(); delay(100); Serial.println("Setup done"); } //=============================================================================== // Main //=============================================================================== void loop() { int btn_Status = HIGH; int lightIntensity; lightIntensity = analogRead(LDR_PIN); // Read the light intensity analogWrite( RGB_G_PIN, map(lightIntensity, 40, 1023, 0, 1023)); btn_Status = digitalRead (BUTTON_PIN); // Check status of button if (btn_Status == LOW) { // Button pushed, so do something Serial.print("Light Intensity Reading: "); Serial.println(lightIntensity); Serial.println("scan start"); digitalWrite(ON_BOARD_LED, LOW); // Turn LED ON // WiFi.scanNetworks will return the number of networks found int n = WiFi.scanNetworks(); Serial.println("scan done"); if (n == 0) Serial.println("no networks found"); else { Serial.print(n); Serial.println(" networks found"); for (int i = 0; i < n; ++i) { // Print SSID and RSSI for each network found Serial.print(i + 1); Serial.print(": "); Serial.print(WiFi.SSID(i)); Serial.print(" ("); Serial.print(WiFi.RSSI(i)); Serial.print(")"); Serial.println((WiFi.encryptionType(i) == ENC_TYPE_NONE) ? " : Unsecure" : " : Encrypted"); delay(10); } } Serial.println(""); digitalWrite(ON_BOARD_LED, HIGH); // Turn LED Off } }
RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD
1 x ESP8266 Witty Cloud ESP-12F WiFi Module
RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD
RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD RoboticsBD
Specific References
Your review appreciation cannot be sent
Report comment
Report sent
Your report cannot be sent
Write your review
Review sent
Your review cannot be sent
Reference: RBD-1965
Reference: RBD-3069
Reference: RBD-0318
Reference: RBD-3975
Brand: Waveshare
Reference: RBD-2550
Reference: RBD-3716
Reference: RBD-3751
Brand: Espressif
Reference: RBD-3990
Reference: RBD-2651
Reference: RBD-1558
Reference: RBD-3959
Reference: RBD-2371
Reference: RBD-3828
Reference: RBD-3682
Reference: RBD-3486
Reference: RBD-2772
Reference: RBD-0133
Reference: 0245
Reference: RBD-1354
Reference: RBD-0022
Reference: RBD-0251
Reference: RBD-0260
Reference: RBD-0269
Reference: RBD-0280
Reference: RBD-3273
Reference: RBD-3269
Reference: RBD-3272
Reference: RBD-3270
Reference: RBD-3271
check_circle
check_circle