Menu

Recent Posts

aki-technical


Translate

Monday, November 2, 2026

ESP8266 Range Finder using HC-SR04 and PCF8574AP LCD

Overview 

The HC-SR04 is an ultra-sonic range finder. It use sound wave at the speed of 340m/s that travel in air to measure any detected obstacle. That sound wave signal will travels back whenever there is a barrier created by any object. It uses a speaker that propagates an ultra-sonic signal that human ears could not hear. The detector is a microphone circuit that has an amplifier. The distance of the detected object is the time the sound wave travel divides by 2. The measurement formula is,

Test distance = (high level time * velocity of sound ) / 2.

The velocity of sound is 340m/s. 


 

ESP8266 Range Finder using HC-SR04 and PCF8574AP LCD
Distance Measurement

 

The table below summarizes the features of the HC-SR04 Distance Sensor.

ESP8266 Range Finder using HC-SR04 and PCF8574AP LCD
HC-SR04 Parameters

 This Arduino module is very popular because of its low cost, easy-to-use, etc.

ESP8266 Range Finder using HC-SR04 and PCF8574AP LCD
The Arduino HC-SR04 Module

ESP8266 Range Finder using HC-SR04 and PCF8574AP LCD
The Arduino HC-SR04 Module

 

The high level time is the input high time creates by the echo pin of the HC-SR04 Ultra-Sonic Range Finder Module. That time duration is measure in micro-seconds, and the Test distance is measure in cm. To measure that time duration, the micro-controller need to process it precisely. In Arduino, it has the pulseIn function that can measure any logic level ( HIGH or LOW) time at any specific input pins. 

ESP8266 Interfaces with the PCF8574AP and HC-SR04 

In this example, I use the HC-SR04 to measure the distance. The result will show on a 16x2 character LCD controlled by the PCF8574AP I/O expansion chip. Because the ESP-12E has a limited of digital I/O pins. On the other hands, Some pins of this IoT module are connected to other peripherals. 

The 7-bit Arduino slave address of the PCF8574AP here is 0x38. Commonly they use the PCF8574T Arduino Two-Wire LCD module that has different slave address.

Circuit Connection

It needs a small breadboard to build the circuit. Connect the all components as follow.

  • Connection between ESP-12E and HC-SR04
HC-SR04ESP12-E
VINVCC
TrigD6 (GPIO 12)
EchoD5 (GPIO 14)
GNDGND


  • Connection between ESP-12E and PCF8574AP LCD
ESP-12EPCF8574AP LCD
GND
GND
D1 (GPIO 12)
SCL 
D2 (GPIO 14)
SDA 
VIN
VCC


ESP8266 Arduino Source Code

I use the Arduino LiquidCrystal_I2C library. It's originally developed to work with the Arduino AVR. However for the ESP8266, it is compatible. It works fine.


  1. #include <Wire.h>
  2. #include <LiquidCrystal_I2C.h>

  3. LiquidCrystal_I2C lcd(0x38,16,2);

  4. #define trigPin D6
  5. #define echoPin D5

  6. /*
  7. PWM OUTPUT 0-25000uS in which 1cm=50uS
  8. */
  9. long duration;
  10. int distance;

  11. void setup() {
  12. pinMode(trigPin,OUTPUT);
  13. pinMode(echoPin,INPUT);
  14. lcd.init();
  15. // Print a message to the LCD.
  16. lcd.backlight();
  17. lcd.clear();
  18. lcd.setCursor(0,0);
  19. lcd.print("ESP-12E PCF8574AP");
  20. lcd.setCursor(0,1);
  21. lcd.print("and HC-SR04");
  22. delay(10000);
  23. lcd.clear();
  24. }

  25. void loop() {
  26. digitalWrite(trigPin,LOW);
  27. delayMicroseconds(7);
  28. // Set the trigPin high for 10 uS
  29. digitalWrite(trigPin,HIGH);
  30. digitalWrite(trigPin,HIGH);
  31. delayMicroseconds(10);
  32. digitalWrite(trigPin,LOW);
  33. duration=pulseIn(echoPin,HIGH);
  34. // Calculation for distance
  35. if(duration<=25000)
  36. distance = duration * 0.034 / 2;
  37. else
  38. distance=0;
  39. lcd.setCursor(0,0);
  40. lcd.print("Time: " + String(duration) + "uS ");
  41. lcd.setCursor(0,1);
  42. lcd.print("Distance: " + String(distance) + "cm ");
  43. delay(500);
  44. }

 

 

Pictures

I can not find these module at any online circuit simulator now. Currently WOKWI only support some high-end board. 

 

ESP8266 Range Finder using HC-SR04 and PCF8574AP LCD
Distance Measurement

 

 

Sunday, November 1, 2026

ESP8266 DHT-11 Sensor and SH1106 OLED Interfacing

Overview 

The DHT-11 is a environmental sensor capable of converting surrounding temperature and humidity. It is a digital sensor, implementing the One-Wire communication protocol. The master micro-controller just need on digital I/O pin to command and get sensor data from this device. Its One-Wire data packet is very easy decode using a simple 8-bit micro-controller. The data packet is 40-bit or 5 bytes, containing two bytes of temperature data, two bytes of humidity data, and one byte of error correction.

 

ESP8266 DHT-11 Sensor and SH1106 OLED Interfacing
Sensor Data Reading


This sensor is very low cost, widely available. It's popular among Arduino users, mini projects, etc. Using this sensor in agricultural or home garden is very popular. However it is not durable due to surrounding environment.

 

Arduino DHT Sensor Library

Adafruit has a lot of libraries and examples for their products. However I didn't buy any products. Some sensor are compatible in software. Install the DHT sensor library and open its example, DHTTester.ino sketch as shown below.

 

ESP8266 DHT-11 Sensor and SH1106 OLED Interfacing
Open the DHTTester.ino Sketch

 This example the master MCU will read the environmental data from DHT sensor. It support DHT11, DTH-21, and DHT-22. However some pins of the ESP-12E board doesn't work with this sensor because they are connected to other devices or have alternative function such as TWI, UART, etc.

ESP8266 Interfaces with DHT-11 Sensor and SH1106 OLED 

I use this example, and added some OLED display function to read and display environmental data and the SH0016 124x64 OLED module. I use pin D3 of the ESP-12E module since other pin doesn't work with this one-wire sensor. You can test it by yourself.

It needs these libraries,

  1.  DHT
  2.  Wire
  3.  Adafruit_GFX
  4.  Adafruit_SH110X
  5. Adafruit_Sensor 

Arduino Source Code


  1. #include "DHT.h"
  2. #include <Wire.h>
  3. #include <Adafruit_GFX.h>
  4. #include <Adafruit_SH110X.h>

  5. #define i2c_Address 0x3c
  6. /*initialize with the I2C addr 0x3D
  7. Typically Adafruit OLED's */
  8. //#define i2c_Address 0x3d

  9. #define SCREEN_WIDTH 128
  10. #define SCREEN_HEIGHT 64
  11. #define OLED_RESET -1
  12. Adafruit_SH1106G display =
  13. Adafruit_SH1106G
  14. (SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

  15. // Digital pin connected to the DHT sensor
  16. #define DHTPIN D3

  17. #define DHTTYPE DHT11 // DHT 11

  18. DHT dht(DHTPIN, DHTTYPE);

  19. void setup() {
  20. // wait for the OLED to power up
  21. delay(250);
  22. // Address 0x3C default
  23. display.begin(i2c_Address, true);
  24. // Clear the buffer.
  25. display.clearDisplay();
  26. Serial.begin(9600);
  27. Serial.println(F("DHTxx test!"));

  28. dht.begin();

  29. display.setTextColor(SH110X_WHITE);
  30. display.setCursor(0, 8);
  31. display.setTextSize(3);
  32. display.println("ESP8266");
  33. display.println("NodeMCU");
  34. display.display();
  35. delay(5000);
  36. display.clearDisplay();
  37. display.setCursor(0, 0);
  38. display.setTextSize(3);
  39. display.println("SH1106");
  40. display.println("OLED");
  41. display.display();
  42. delay(5000);
  43. display.clearDisplay();

  44. display.setCursor(10, 8);
  45. display.setTextSize(3);
  46. display.println("DHT-11");
  47. display.println("Sensor");
  48. display.display();
  49. delay(5000);
  50. display.clearDisplay();
  51. }

  52. void loop() {
  53. // Wait a few seconds between measurements.
  54. delay(2000);

  55. /* Reading temperature or humidity takes
  56. about 250 milliseconds!
  57. Sensor readings may also be up to 2 seconds
  58. 'old' (its a very slow sensor)*/
  59. float h = dht.readHumidity();
  60. // Read temperature as Celsius (the default)
  61. float t = dht.readTemperature();
  62. // Read temperature as Fahrenheit (isFahrenheit = true)
  63. float f = dht.readTemperature(true);

  64. // Check if any reads failed and exit early (to try again).
  65. if (isnan(h) || isnan(t) || isnan(f)) {
  66. Serial.println(F("Failed to read from DHT sensor!"));
  67. return;
  68. }

  69. // Compute heat index in Fahrenheit (the default)
  70. float hif = dht.computeHeatIndex(f, h);
  71. // Compute heat index in Celsius (isFahreheit = false)
  72. float hic = dht.computeHeatIndex(t, h, false);

  73. Serial.print(F("Humidity: "));
  74. Serial.print(h);
  75. Serial.print(F("% Temperature: "));
  76. Serial.print(t);
  77. Serial.print(F("°C "));
  78. Serial.print(f);
  79. Serial.print(F("°F Heat index: "));
  80. Serial.print(hic);
  81. Serial.print(F("°C "));
  82. Serial.print(hif);
  83. Serial.println(F("°F"));

  84. display.clearDisplay();
  85. delay(1500);
  86. // Clear the buffer.
  87. display.clearDisplay();
  88. display.setTextColor(SH110X_WHITE);
  89. display.setCursor(32, 0);
  90. display.setTextSize(2);
  91. display.println("Temp:");
  92. display.println(" " + String(t) + "C");
  93. display.setCursor(0, 32);
  94. display.println(" Humidity:");
  95. display.println(" " + String(h) + "%");
  96. display.display();
  97. }


Connection

Connect all components as follow,

  1. SH1106 OLED 

ESP8266 DHT-11 Sensor and SH1106 OLED Interfacing
Table 1: ESP-12E and SH1106 Connection

  1.  DHT-11 Sensor

ESP8266 DHT-11 Sensor and SH1106 OLED Interfacing
Table 2: ESP-12E and DHT-11 Connection

Picture

I tested it using my DIY ESP8266 TWI Communication Board.


 

ESP8266 DHT-11 Sensor and SH1106 OLED Interfacing

ESP8266 Interfaces with DHT-11 Sensor and SH1106 OLED 


ESP8266 DHT-11 Sensor and SH1106 OLED Interfacing

ESP8266 Interfaces with DHT-11 Sensor and SH1106 OLED 


Video

 

I keep the video on YouTube. 

 


 


 



 

 

 

 

 

 

 

 

Saturday, October 31, 2026

ESP8266 TWI SH1106 and DS18B20 Temperature Sensor

The DS18B20 is a digital thermometer able to converts surrounding temperature between -55°C and +125°C. It operates between 3.0VDC to 5.5VDC which is suitable for hobbyist and industrial applications. It implements the One-Wire digital communication protocol, requires only one bi-directional I/O pin for data and command transmission or reception. Its ROM Search feature allow multiple DS18X20 sensors to connect on a single wire bus.

 

ESP8266 TWI SH1106 and DS18B20 Temperature Sensor
Temperature Reading via ESP8266 D0 Pin

Commanding and decoding data from this sensor is easy. The manufacturers offer a lot of example programs written in Assembly or C language. For Arduino users, there are a lot of libraries available, created by various authors.

Using Arduino IDE, we can use this sensor from scratch by installing some related libraries. I use the  OneWire and DallasTemperature library. Because its C++ function is easily readable and short. Go into the DallasTemprature and open the simple.ino file. To test this sensor and see the result over serial port.

 

ESP8266 TWI SH1106 and DS18B20 Temperature Sensor
Arduino simple.ino Sketch
 

However I modify this example to work with a 128x64 OLED display, SH1106. So it needs these libraries:

  1. OneWire
  2.  DallasTemperature
  3.  Wire
  4.  Adafruit_GFX
  5.  Adafruit_SH110X

In this example, the ESP-12E read temperature data from a single DS18B20 connects to D0 pin. The result will show on the SH1106 OLED display.

ESP8266 TWI SH1106 and DS18B20 Temperature Sensor
DS18B20 Pin Configurations
 

There are many device packages for this sensor. For hobbyists, it's suitable to use a transistor-like TO-92 package. However, there are some Arduino modules for this sensor available at very low cost. That's below 1USD.

Its DQ or data pin is open-drain. So we need to add a weak pull up resistor between 4.7kΩ and 10kΩ depending on its range.
 

ESP8266 Arduino Source Code:

  1. // Include the libraries we need
  2. #include <OneWire.h>
  3. #include <DallasTemperature.h>

  4. /* Data wire is plugged into
  5. port 2 on the Arduino */
  6. #define ONE_WIRE_BUS D0

  7. /* Setup a oneWire instance to communicate
  8. with any OneWire devices
  9. (not just Maxim/Dallas temperature ICs) */
  10. OneWire oneWire(ONE_WIRE_BUS);

  11. /* Pass our oneWire reference
  12. to Dallas Temperature. */
  13. DallasTemperature sensors(&oneWire);

  14. // OLED Section
  15. #include <Wire.h>
  16. #include <Adafruit_GFX.h>
  17. #include <Adafruit_SH110X.h>

  18. /* Uncomment the initialize the I2C address ,
  19. uncomment only one, If you get a totally blank
  20. screen try the other*/
  21. #define i2c_Address 0x3c
  22. /*initialize with the I2C addr 0x3D
  23. Typically Adafruit OLED's */
  24. //#define i2c_Address 0x3d

  25. #define SCREEN_WIDTH 128
  26. #define SCREEN_HEIGHT 64
  27. #define OLED_RESET -1
  28. Adafruit_SH1106G display =
  29. Adafruit_SH1106G(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
  30. /*
  31. * The setup function. We only start the sensors here
  32. */
  33. void setup(void)
  34. {
  35. // start serial port
  36. Serial.begin(9600);
  37. Serial.println("Dallas Temperature IC Control Library Demo");

  38. // Start up the library
  39. sensors.begin();

  40. delay(250); // wait for the OLED to power up
  41. display.begin(i2c_Address, true); // Address 0x3C default
  42. // Clear the buffer.
  43. display.clearDisplay();
  44. display.setTextColor(SH110X_WHITE);
  45. display.setCursor(0, 8);
  46. display.setTextSize(3);
  47. display.println("ESP8266");
  48. display.println("NodeMCU");
  49. display.display();
  50. delay(5000);
  51. display.clearDisplay();
  52. display.setCursor(10, 8);
  53. display.setTextSize(3);
  54. display.println("SH1106");
  55. display.println(" OLED");
  56. display.display();
  57. delay(5000);
  58. display.clearDisplay();

  59. display.setCursor(10, 8);
  60. display.setTextSize(3);
  61. display.println("Temp");
  62. display.println("Sensor");
  63. display.display();
  64. delay(5000);
  65. display.clearDisplay();
  66. }

  67. /*
  68. * Main function, get and show the temperature
  69. */
  70. void loop(void)
  71. {
  72. Serial.print("Requesting temperatures...");
  73. sensors.requestTemperatures();
  74. Serial.println("DONE");
  75. delay(1500);
  76. float tempC = sensors.getTempCByIndex(0);

  77. // Check if reading was successful
  78. if (tempC != DEVICE_DISCONNECTED_C)
  79. {
  80. Serial.print("Temperature for the device 1 (index 0) is: ");
  81. Serial.println(tempC);
  82. }
  83. else
  84. {
  85. Serial.println("Error: Could not read temperature data");
  86. }
  87. display.setTextColor(SH110X_WHITE);
  88. display.setCursor(16, 0);
  89. display.setTextSize(2);
  90. display.println("Temp (C):");
  91. display.setCursor(16, 32);
  92. display.setTextSize(3);
  93. display.println(tempC);
  94. display.display();
  95. delay(900);
  96. // Clear the buffer.
  97. display.clearDisplay();
  98. }

Pictures:

I use my own ESP8266 TWI Prototype Board to test this example.

 

ESP8266 TWI SH1106 and DS18B20 Temperature Sensor
ESP8266 TWI Prototype Board

 

ESP8266 TWI SH1106 and DS18B20 Temperature Sensor
ESP8266 TWI Prototype Board

 

ESP8266 TWI SH1106 and DS18B20 Temperature Sensor
ESP8266 TWI Prototype Board

 Video:

 


 



 

ESP8266 TWI and SH1106 DS1307 RTC

In this example, I use the TWI module of the ESP8266 to interfaces with the SH1106 128x64 OLED and the DS1307 Real Time Clock (RTC) chip. The SH0016 OLED and the DS1307 RTC chip share the same pins on a single TWI bus. The TWI pins of the ESP8266 are, SCL (D0) and SDA (D1).

 

ESP8266 TWI and SH1106 DS1307 RTC

 

 

ESP8266 Arduino Source Code:

I use the Adafruit_SH110X, Adafruit_GFX, Wire, and RtcDs1307 library. 





  1. #include <SPI.h>
  2. #include <Wire.h>
  3. #include <Adafruit_GFX.h>
  4. #include <Adafruit_SH110X.h>
  5. #include <RtcDS1307.h>
  6. RtcDS1307<TwoWire> Rtc(Wire);

  7. //initialize with the I2C addr 0x3C Typically eBay OLED's
  8. #define i2c_Address 0x3c
  9. //initialize with the I2C addr 0x3D Typically Adafruit OLED's
  10. //#define i2c_Address 0x3d

  11. #define SCREEN_WIDTH 128 // OLED display width, in pixels
  12. #define SCREEN_HEIGHT 64 // OLED display height, in pixels
  13. #define OLED_RESET -1 // QT-PY / XIAO
  14. Adafruit_SH1106G display =
  15. Adafruit_SH1106G(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

  16. bool wasError(const char* errorTopic = "")
  17. {
  18. uint8_t error = Rtc.LastError();
  19. if (error != 0)
  20. {
  21. // we have a communications error
  22. // see https://www.arduino.cc/reference/en/language/functions/communication/wire/endtransmission/
  23. // for what the number means
  24. Serial.print("[");
  25. Serial.print(errorTopic);
  26. Serial.print("] WIRE communications error (");
  27. Serial.print(error);
  28. Serial.print(") : ");

  29. switch (error)
  30. {
  31. case Rtc_Wire_Error_None:
  32. Serial.println("(none?!)");
  33. break;
  34. case Rtc_Wire_Error_TxBufferOverflow:
  35. Serial.println("transmit buffer overflow");
  36. break;
  37. case Rtc_Wire_Error_NoAddressableDevice:
  38. Serial.println("no device responded");
  39. break;
  40. case Rtc_Wire_Error_UnsupportedRequest:
  41. Serial.println("device doesn't support request");
  42. break;
  43. case Rtc_Wire_Error_Unspecific:
  44. Serial.println("unspecified error");
  45. break;
  46. case Rtc_Wire_Error_CommunicationTimeout:
  47. Serial.println("communications timed out");
  48. break;
  49. }
  50. return true;
  51. }
  52. return false;
  53. }

  54. void setup() {
  55. Rtc.Begin();
  56. #if defined(WIRE_HAS_TIMEOUT)
  57. Wire.setWireTimeout(3000 /* us */, true /* reset_on_timeout */);
  58. #endif

  59. RtcDateTime compiled = RtcDateTime(__DATE__, __TIME__);
  60. if (!Rtc.IsDateTimeValid())
  61. {
  62. if (!wasError("setup IsDateTimeValid"))
  63. {
  64. // Common Causes:
  65. // 1) first time you ran and the device wasn't running yet
  66. // 2) the battery on the device is low or even missing

  67. Serial.println("RTC lost confidence in the DateTime!");
  68. // following line sets the RTC to the date & time this sketch was compiled
  69. // it will also reset the valid flag internally unless the Rtc device is
  70. // having an issue

  71. Rtc.SetDateTime(compiled);
  72. }
  73. }

  74. if (!Rtc.GetIsRunning())
  75. {
  76. if (!wasError("setup GetIsRunning"))
  77. {
  78. Serial.println("RTC was not actively running, starting now");
  79. Rtc.SetIsRunning(true);
  80. }
  81. }

  82. RtcDateTime now = Rtc.GetDateTime();
  83. if (!wasError("setup GetDateTime"))
  84. {
  85. if (now < compiled)
  86. {
  87. Rtc.SetDateTime(compiled);
  88. }
  89. }

  90. delay(250); // wait for the OLED to power up
  91. display.begin(i2c_Address, true); // Address 0x3C default
  92. //display.setContrast (0); // dim display
  93. // Clear the buffer.
  94. display.clearDisplay();

  95. // text display tests
  96. display.setTextSize(2);
  97. display.setTextColor(SH110X_BLACK, SH110X_WHITE); // 'inverted' text
  98. display.setCursor(0, 0);
  99. display.println("ESP8266");
  100. display.setTextColor(SH110X_WHITE);
  101. display.println("SH1106 LCD");
  102. display.println("and DS1307");
  103. display.println("RTC Chip");
  104. display.display();
  105. delay(5000);
  106. display.clearDisplay();
  107. display.display();
  108. }


  109. void loop() {
  110. display.clearDisplay();
  111. if (!Rtc.IsDateTimeValid())
  112. {
  113. if (!wasError("loop IsDateTimeValid"))
  114. {
  115. display.setCursor(0, 0);
  116. display.println("RTC lost confidence in the DateTime!");
  117. display.display();
  118. }
  119. }

  120. RtcDateTime now = Rtc.GetDateTime();
  121. if (!wasError("loop GetDateTime"))
  122. {
  123. printDateTime(now);
  124. }
  125. delay(500);
  126. }

  127. #define countof(a) (sizeof(a) / sizeof(a[0]))

  128. void printDateTime(const RtcDateTime& dt)
  129. {
  130. char datestring[26];

  131. snprintf_P(datestring,
  132. countof(datestring),
  133. PSTR("%02u/%02u/%04u %02u:%02u:%02u"),
  134. dt.Month(),
  135. dt.Day(),
  136. dt.Year(),
  137. dt.Hour(),
  138. dt.Minute(),
  139. dt.Second() );
  140. display.setCursor(0, 0);
  141. display.println("Date:");
  142. display.println(String(dt.Year()) + "/" + String(dt.Month()) + "/" + String(dt.Day()));
  143. display.println("Time:");
  144. display.println(String(dt.Hour()) + ":" + String(dt.Minute()) + "/" + String(dt.Second()));
  145. display.display();
  146. }








 In Arduino, It also has a software TWI library. So if these two pins are in used with other devices. We can select other digital pins.

Pictures

I tested this example on my DIY ESP8266 TWI Board.

ESP8266 TWI and SH1106 DS1307 RTC
My DIY ESP8266 TWI Board

ESP8266 TWI and SH1106 DS1307 RTC
My DIY ESP8266 TWI Board

 

 

Search This Blog

Popular Posts

Electronics and Programming Tutorials

DIY Electronic Projects And Instruments

Labels

23K256 (1) 24C16B (2) 25AA010A (2) 8051 (7) 93AA46B (1) ADC (40) Analog Comparator (1) Arduino (15) Arduino Uno (15) ARM (32) AT89C52 (7) ATMega32 (59) ATMega644P (27) AVR (88) AVR PCB (2) Bootloader (1) CCS PICC (31) Change Notify Interrupt (CNI) (2) DAC (2) DHT11 (6) Display (164) Distance Sensor (4) dot matrix (1) ds1307 (11) DS18B20 (7) ds3231 (2) ds3232 (2) dsPIC (16) dsPIC30F1010 (3) dsPIC30F2010 (15) EEPROM (5) Environment Sensor (6) ESP-12E (10) ESP32 (1) esp8266 (11) Graphical LCD (3) HC-SR04 (1) HD44780 (14) I2C (40) ILI9341 (1) Input/Output (85) Interrupt (22) IoT (4) IoT PCB (1) Keil (5) Keypad (16) KS0108 (3) LCD (93) LM35 (4) Master/Slave (2) MAX7221 (1) MCP23017 (8) MCP23S17 (7) MCP4921 (1) MCP4922 (2) Meter (3) MikroC (2) MikroC ARM (1) MikroC dsPIC (11) MikroC PIC (2) Module PCB (2) Motor (15) MPLABX (73) Nokia 5110 LCD (5) OLED (6) One-Wire (8) Oscillator (8) PCB (13) PCD8544 (3) PCF8574 (16) PIC (122) PIC12F (3) PIC16 (105) PIC16F628A (3) PIC16F630 (2) PIC16F716 (4) PIC16F818 (11) PIC16F818/819 (3) PIC16F84A (16) PIC16F876A (2) PIC16F877A (9) PIC16F88 (2) PIC16F887 (60) PIC18 (19) PIC18F1220 (5) PIC18F2550 (5) PIC18F4550 (14) PICKit2 (1) PICMicro PCB (4) Pin Change Interrupt (1) PLL (1) PWM (12) RTC (16) SBN0064G (1) Sensor (16) SH1106 (8) Shift Register (15) Shift Registers (19) SN74HC595N (9) Software SPI (1) Software TWI (3) SPI (44) sprinf (3) ST7735 (1) STM32 (29) STM32 Black Pill (1) STM32 Blue Pill (12) STM32 HAL (23) STM32CubeIDE (32) STM32F103C8T6 (9) STM32F103R6 (18) STM32F401CCU6 (1) SysTick (7) temperature sensor (15) TFT (1) TG12864A (1) Thermometer (22) Timer/Counter (32) TM1637 (2) twi (18) UART (11) Ultrasonic (4) Voltmeter (7) WDT (1) Web Server (1) Wi-Fi (3) XC16 (2) XC8 (96)

aki-technical