Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/xreef/pcf8574_micropython_library
MicroPython library for pcf8574 an i2c digital expander for Arduino, esp32, SMT32 and ESP8266. Can read write digital values with only 2 wire.
https://github.com/xreef/pcf8574_micropython_library
arduino digital esp32 esp8266 expander i2c library micropython pcf8574 pcf8574a raspberry rp2040 samd stm32 wire
Last synced: 3 months ago
JSON representation
MicroPython library for pcf8574 an i2c digital expander for Arduino, esp32, SMT32 and ESP8266. Can read write digital values with only 2 wire.
- Host: GitHub
- URL: https://github.com/xreef/pcf8574_micropython_library
- Owner: xreef
- License: other
- Created: 2023-04-14T16:01:15.000Z (almost 2 years ago)
- Default Branch: master
- Last Pushed: 2023-04-18T20:36:05.000Z (almost 2 years ago)
- Last Synced: 2024-10-11T05:03:07.365Z (3 months ago)
- Topics: arduino, digital, esp32, esp8266, expander, i2c, library, micropython, pcf8574, pcf8574a, raspberry, rp2040, samd, stm32, wire
- Language: Python
- Homepage: https://www.mischianti.org/category/my-libraries/pcf8574/
- Size: 10.7 KB
- Stars: 6
- Watchers: 2
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
#
#### www.mischianti.org# PCF8574 PCF8574AP digital input and output expander with i2c bus.
## Changelog
- 18/04/2023: v0.0.2 Add static declaration for Px constants inside class.
- 14/04/2023: v0.0.1 Initial commit of stable version.I try to simplify the use of this IC, with a minimal set of operations.
Tested with esp8266, esp32, Arduino, Arduino SAMD (Nano 33 IoT, MKR etc.), STM32 and rp2040 (Raspberry Pi Pico and similar)
PCF8574P address map 0x20-0x27
PCF8574AP address map 0x38-0x3f### Installation
To install the library execute the following command:```bash
pip install pcf8574-library
```**Constructor:**
Pass the address of I2C
```python
from PCF8574 import PCF8574
pcf = PCF8574(0x38, sda=21, scl=22)
```
To use interrupt you must pass the interrupt pin and the function to call when interrupt raised from PCF8574
```python
from PCF8574 import PCF8574
def keyPressedOnPCF8574(pin):
# Interrupt called (No Serial no read no wire in this function, and DEBUG disabled on PCF library)
keyPressed = True
pcf = PCF8574(0x38, sda=21, scl=22, interrupt_callback=keyPressedOnPCF8574, interrupt_pin=18)
```You must set input/output mode:
```python
from machine import Pin
from PCF8574 import PCF8574pcf.Pin(PCF8574.P0, Pin.IN)
pcf.Pin(PCF8574.P1, Pin.IN, Pin.PULL_UP)
pcf.Pin(PCF8574.P2, Pin.IN)
pcf.Pin(PCF8574.P3, Pin.IN)
pcf.Pin(PCF8574.P7, Pin.OUT)
pcf.Pin(PCF8574.P6, Pin.OUT, 1)
pcf.Pin(PCF8574.P5, Pin.OUT, 0)
pcf.Pin(PCF8574.P4, Pin.OUT, 0)
```then IC as you can see in the image has 8 digital input/output ports:
![PCF8574 schema](https://github.com/xreef/PCF8574_library/raw/master/resources/PCF8574-pins.gif)
To read all analog input in one trasmission you can do (even if I use a 10millis debounce time to prevent too much read from i2c):
```python
digital_input = pcf.digital_read_all()
print(digital_input.p0)
print(digital_input.p1)
print(digital_input.p2)
print(digital_input.p3)
print(digital_input.p4)
print(digital_input.p5)
print(digital_input.p6)
print(digital_input.p7)
array_input = pcf.digital_read_all_array()
print(array_input)
byte_input = pcf.digital_read_all_byte()
print(bin(byte_input))
```If you want to read a single input:
```python
digital_input = pcf.digital_read(PCF8574.P1)
print(digital_input)
```If you want to write a digital value:
```python
pcf.digital_write(PCF8574.P1, 1)
```You can also use an interrupt pin:
You must initialize the pin and the function to call when interrupt raised from PCF8574
```python
def callback(pin):
now = utime.ticks_ms()
global count
count += 1
print("Time: {} {}".format(now, count))
pcf.attach_interrupt(18, callback)
```For the examples I use this wire schema on breadboard:
![Breadboard](https://www.mischianti.org/wp-content/uploads/2021/04/WeMos-D1-esp8266-pcf8574-IC-wiring-schema-8-leds.jpg)
![Breadboard](https://www.mischianti.org/wp-content/uploads/2021/04/esp32-pcf8574-IC-wiring-schema-8-leds.jpg)
![Breadboard](https://www.mischianti.org/wp-content/uploads/2022/08/stm32_pcf8574_wiring_4_Led_4_Buttons_bb.jpg)