Commit Graph

244 Commits

Author SHA1 Message Date
Phil Howard 6d6803612a Add SCD41 MicroPython bindings 2021-12-16 11:39:34 +00:00
Philip Howard c322717eb2
Merge pull request #193 from pimoroni/pure-cpp-i75
Pure C++ HUB75 example
2021-12-08 15:25:53 +00:00
Phil Howard 556d8cb57d HUB75: Add expansion and feature pins 2021-12-06 14:37:04 +00:00
Phil Howard 580d8cf7a2 Plasma: Add WS2812 W suppot for #220 2021-12-03 10:50:06 +00:00
Phil Howard 1bb4383074 HUB75 Perf, C++ scrolling text, docs 2021-12-02 12:41:30 +00:00
Phil Howard 4dc3f9b9c4 HUB75 Scrolling wavy text and clock demo 2021-12-01 21:57:40 +00:00
Phil Howard 4d33649cd2 HUB75: More rational DMA/PIO setup/teardown, fixes reset bug
Defensively tear down DMA/PIO so it's in a known good state upon (soft)reset.

Issue was a race condition with DMA interrupts firing and not being achknowledged, leaving a stuck raised IRQ.

The blocking wait for DMA transactions also exacerbated this, turning a borken DMA interrupt and blank screen into an unrecoverable hardlock.

...not that the blank screen was recoverable without a soft reset anyway!
2021-11-25 17:52:44 +00:00
Phil Howard e09ff78351 HUB75 Strobe invert and larger panel chaining support 2021-11-24 21:36:58 +00:00
Phil Howard d4bf69324f HUB75 tidyup, examples 2021-11-23 13:58:34 +00:00
Phil Howard c07567f922 HUB75 Panel Types for FM6126A setup, fixes for 32x32 2021-11-23 11:29:41 +00:00
Phil Howard eed7992127 HUB75 Fix intermittent display corruption issue
The FM6126A register write was causing some weirdness on soft reset where the pin state wasn't predictable.

Have twiddled some pins at startup to ensure everything works as expected.

Add set_hsv and set_all_hsv (since setting individual pixels with hsv is S L O W)

Made "flip()" blocking, it was easy to accidentally get a little tearing.
2021-11-22 16:34:56 +00:00
Phil Howard 66d25d2e9c HUB75 Prevent stuck row on soft reset
TODO:

* Move this into drivers/ for C++ use too.
* Display still goes mighty weird sometimes!
2021-11-22 15:22:37 +00:00
Phil Howard 0e8c1228af HUB75 MicroPython DMA and PIO
Switch MicroPython HUB75 driver over to DMA/PIO.

TODO:

* Move this into drivers for C++ use too
* Fix hitting "Stop" in Thonny causing rows to stick on the display (this is bad, and should not happen)
* Fix "Stop -> Start" in Thonny causing weird display issues (it's not memory offets, maybe DMA/PIO issues?)
2021-11-22 14:12:18 +00:00
Edd Hurst 47259c55e8
Fix documentation examples setting RGB LED
Update the examples using set_led function and replacing to use set_rgb

Fixes #221
2021-11-21 14:05:12 +00:00
Phil Howard 01f546aaf1 HUB75 MicroPython bindings 2021-11-18 12:51:43 +00:00
Philip Howard e249113fea
Merge pull request #183 from pimoroni/driver/icp10125
Driver for the ICP10125 pressure & temperature sensor
2021-11-09 17:02:50 +00:00
Philip Howard 1a9e2802fe
Merge pull request #206 from pimoroni/driver/pwm3901
C++ and MP drivers and examples for Optical Flow sensors
2021-10-06 11:19:29 +01:00
Philip Howard 3c57cbcdef
Merge pull request #208 from pimoroni/picowireless-ppwhttp
PicoWireless: move HTTP code to ppwhttp library
2021-10-06 11:12:13 +01:00
Phil Howard 71058bca1e PicoWireless: use strnlen for fwver and SSIDs
Avoid going through std::string and instead uses strnlen to get string length.

Prevents extra null chars leaking into the Python string.
2021-10-04 16:16:19 +01:00
ZodiusInfuser 27b74e140b Finished drivers bindings and examples for flow sensors. 2021-09-13 21:58:11 +01:00
Phil Howard 759868e787 Python bindings & docs for ICP10125 2021-09-08 14:10:21 +01:00
ZodiusInfuser 9906fdec38 C class and MP bindings for PicoDisplay2 2021-09-08 13:56:03 +01:00
Phil Howard 5abdad05a8 Fix MicroPython alloc'd bytearray support in APA102 driver
A bytearray allocated in Python would point to uninitialised bytes, missing the SOF byte and brightness for APA102 pixels.

Add a blunt loop over the MicroPython buffer, calling "brightness" for each RGB element to ensure the SOF byte and brightness are initialized.
2021-08-25 22:00:12 +01:00
ZodiusInfuser 8a4c4d8af8 Exposed clear on rotary breakout 2021-08-24 15:35:14 +01:00
ZodiusInfuser cf4b45acc7 Exposed Get to MP, and added I2C pin numbers 2021-08-24 15:21:14 +01:00
ZodiusInfuser c8f90ea846 Changed default color order to GRB to match our strips 2021-08-23 17:18:34 +01:00
ZodiusInfuser 4976c90ab3
Updated readme with changes, and description of current sensing 2021-08-19 16:15:38 +01:00
ZodiusInfuser 7496e8c8ba Renamed plasma mp directory to match module name 2021-08-19 15:25:12 +01:00
ZodiusInfuser 0faa312358 Updated micropython example to use working submodule 2021-08-19 15:16:40 +01:00
ZodiusInfuser aac8c8d2fc Test of sub module 2021-08-19 14:51:37 +01:00
ZodiusInfuser 823729dc24 Move apa and ws PIO into drivers so they can be easily used with more boards 2021-08-19 13:40:46 +01:00
ZodiusInfuser 281288a6f4 Added Dat and Clk defines 2021-08-19 12:58:13 +01:00
ZodiusInfuser a9883788f8 Added pins for user sw and current sense 2021-08-19 12:58:13 +01:00
Phil Howard eb91f04129 Add general purpose Analog wrapper for isense
Add ADC_GAIN and SHUNT_RESISTOR values to plasma for configuring Analog current sense.
2021-08-12 15:47:59 +01:00
Phil Howard 6ce80cd289 Plasma WS2812: Add RGBW and color-order support 2021-08-02 14:37:07 +01:00
Phil Howard 693e84c73d Allow uP allocated buffer for Plasma LEDs 2021-08-02 14:37:07 +01:00
Phil Howard 59d3c91f1b Demo and document RGBLED and Button
Add constants to `plasma` module for Plasma 2040 pins.
2021-08-02 14:37:07 +01:00
Phil Howard 596fb55a57 Add "plasma" MicroPython module
Includes "WS2812" and "APA102" modules, wrapping the libraries.

Uses a destructor to clean up the LED strip and resources when MicroPython is stopped/restarted.
2021-08-02 14:37:06 +01:00
Phil Howard 218d8ea929 Add documentation and features to BMx280 modules 2021-08-02 14:21:00 +01:00
Phil Howard be9b1437db Add MicroPython bindings for BME280 and BMP280 2021-08-02 14:20:59 +01:00
Phil Howard 746e21c542 BME68X Add Time/Temp config to Gas, document 2021-08-02 14:12:46 +01:00
Phil Howard 618fd559f9 BME68X Python example, docs and configure 2021-08-02 14:12:46 +01:00
Phil Howard c402d92e0f Basic MicroPython bindings for BME68X
The BME68X library is *linked* against the MicroPython bindings, rather than compiled directly in.
This saves specifing the list of target files twice.
2021-08-02 14:12:46 +01:00
Phil Howard a0c2201df2 BH1745: Add I2C address constants 2021-07-30 13:46:28 +01:00
Phil Howard b80b714c4f BH1745 MicroPython bindings & example 2021-07-30 12:41:06 +01:00
Philip Howard 27fa43087b
Merge pull request #161 from pimoroni/patch-lcdtext
MP Fix for text scaling on lcd breakouts not working, and non-string vars hard-locking
2021-07-12 17:42:52 +01:00
Phil Howard 9d897276f4 Support both kwarg and positional scale
Relies on the default value of the scale argument to avoid needing to explicitly check if it's been supplied.

Fixes x/y (again) on character.
2021-07-12 17:31:17 +01:00
Phil Howard 91c346a17c Change wr to wordwrap for clarity 2021-07-12 16:07:10 +01:00
Phil Howard b4c0d78ef7 Fix RTC year argument for #176 2021-07-07 17:11:02 +01:00
frankdrn f65d2d00ed
Fix character positioning for colourlcd160x80 2021-06-05 09:09:20 +01:00
frankdrn a2d2165f81
Fix character positioning for colourlcd240x240 2021-06-05 09:07:08 +01:00
frankdrn 09b443bf2d
Update breakout_roundlcd.cpp 2021-06-05 09:04:34 +01:00
ZodiusInfuser dbbe71702a Fix for text scaling on lcd breakouts not working, and non-string vars hard-locking 2021-05-25 17:06:52 +01:00
Phil Howard 225d5e024f Append CMAKE_MODULE_PATHs to simplify micropython.cmake, drop .mk files
This change appends the list dir and project root dir to CMAKE_MODULE_PATH so that it doesn't need prepended to each "include" directive.

All .mk files have been deleted, since these are completely redundant.
2021-05-21 11:34:52 +01:00
Phil Howard 66f6983290 Port remaining modules to PimoroniI2C, update examples 2021-05-18 11:18:41 +01:00
Phil Howard edf77ddb76 Add finaliser for Pimoroni I2C
This is the final piece of the puzzle.

Prior to this rather considerable change, Pimoroni breakouts were not de-init'ing I2C when they failed to init()

This change adds a __del__ method which cleans up the I2C instance attached to a MicroPython object.

Under the hood this calls i2c_deinit() and resets the associated pins to their default state.

This means that I2C is now cleaned up during a *soft* reset, so running a script with the wrong pins, seeing an error,
changing the pins and running it again will not result in subsequent I2C errors. Previously a hard reset was required.

To recreate on Breakout Garden run the following code:

```
from breakout_potentiometer import BreakoutPotentiometer
from pimoroni_i2c import PimoroniI2C

i2c = PimoroniI2C()
pot = BreakoutPotentiometer(i2c)
```

This will fail correctly with "Potentiometer breakout not found when initialising."
(The default pins are configured for Pico Explorer)

Now change that to the following and run again without hard-resetting:

```
from breakout_potentiometer import BreakoutPotentiometer
from pimoroni_i2c import PimoroniI2C

i2c = PimoroniI2C(4, 5)
pot = BreakoutPotentiometer(i2c)
```

This should now work, since the failed I2C instance was cleaned up.

Without this change, the second attempt would result in an inexplicable failure.

Since most? (many?) Pico users do not have a reset button, this trap requiring a hard-reset is pretty nasty and would likely have resulted in a support nightmare.

Whew.
2021-05-18 09:48:41 +01:00
Phil Howard b2056040e8 Port Encoder and Potentiometer to Pimoroni I2C
Wraps just enough of Pimoroni I2C to make it work in MicroPython.

Ports Encoder and Potentiometer to use a PimorniI2C() instance in lieu of sda/scl.
2021-05-17 18:09:39 +01:00
Phil Howard 77839e2a6a Tidy up constructors, drop unused variables, const single addr
Removes i2c_inst_t from constructors since it's ignored, and updated the Python bindings not to supply this argument. Instance is inferred from the supplied pins.
2021-05-17 14:50:49 +01:00
Phil Howard 445737088f Switch drivers over to I2C class, tidy up common include
Removes all driver-specific SDA/SCL pin definitions and defaults.
Pin type is "uint" everywhere, but "PIN_UNUSED" is *int*_max for MicroPython compat. That's still a lot of pins!
Adds baudrate to the I2C class, and allows a driver (like Trackball) to check the baudrate is supported
2021-05-17 11:46:12 +01:00
Phil Howard 42c7555c96 Add common I2C class
This change adds a common I2C class, gathering various I2C functions into a single point of responsibility.

It's necessary for correctly managing the I2C bus pins and state across multiple devices.
2021-05-14 23:02:38 +01:00
Phil Howard 3dfae2ed5c Add a common header for pins and settings
* Add a common/pimoroni.hpp to list default pins for various add-ons
* Move the BG SPI Slot enum here for safe keeping
* Switch all GPIO pin references to "uint" to match Pico SDK and bring back PIN_UNUSED as UINT_MAX
2021-05-14 21:55:19 +01:00
ZodiusInfuser 3e9d670298 Better solution to keywords and constructors, for SPI breakouts 2021-05-14 18:26:44 +01:00
ZodiusInfuser 1508f650b9 Fix for i2c select 2021-05-14 18:13:47 +01:00
ZodiusInfuser 1ee5101826 Fix for i2c select 2021-05-14 18:00:26 +01:00
ZodiusInfuser f2ee2a4f8d Better solution to keywords and constructors. Just for I2C for now 2021-05-14 17:14:07 +01:00
ZodiusInfuser 09fc7ca4a7 Added MP address printout for supported breakouts 2021-05-14 15:14:47 +01:00
ZodiusInfuser 8cbc290de2 Fix for keyworks not always working in MP class constructors of breakouts (and removed some whitespaces) 2021-05-14 14:30:08 +01:00
ZodiusInfuser 7886b8e78d Finished MP bindings for RV3028 and included a simple example 2021-05-14 13:15:39 +01:00
ZodiusInfuser 2be5528ec7 Partial micropython bindings for RV3028 2021-05-14 13:15:38 +01:00
Phil Howard 0c34de23f5 Tidy up include paths 2021-05-14 12:49:48 +01:00
ZodiusInfuser 7eb8197e45 Added micropython examples for IOExpander 2021-05-14 12:41:46 +01:00
ZodiusInfuser 4b850b9290 Added micropython examples for Pot and Enc 2021-05-14 12:41:46 +01:00
ZodiusInfuser 1b860840a3 MP path fixes 2021-05-14 12:41:46 +01:00
ZodiusInfuser d4ba1d97d9 Switch C++ to use Direction enum for functions and added Direction contants to MP 2021-05-14 12:41:46 +01:00
ZodiusInfuser 4a206a9b70 Fix for set brightness not working 2021-05-14 12:41:46 +01:00
ZodiusInfuser 42f2bff6c7 Fixed pot read from returning bool to returning a float, and removed read_as_percent for read_raw 2021-05-14 12:41:46 +01:00
ZodiusInfuser d45a92fef3 Micropython bindings for IOExpander breakout 2021-05-14 12:41:46 +01:00
ZodiusInfuser 31edcf8f93 Renamed IOE's set_addr method to set_address 2021-05-14 12:41:46 +01:00
ZodiusInfuser 3b9927fbef Added initialisation check to Enc, Pot and MICS MP bindings 2021-05-14 12:41:46 +01:00
ZodiusInfuser fd38343924 Micropython bindings for MICS breakout 2021-05-14 12:41:45 +01:00
ZodiusInfuser 0ce424275f Removed some whitespaces 2021-05-14 12:41:27 +01:00
ZodiusInfuser f527b25fed Micropython bindings for Encoder and Pot breakouts 2021-05-14 12:41:23 +01:00
Philip Howard e26677f81a
Merge pull request #148 from pimoroni/patch-better-include-paths
Remove relative include paths
2021-05-14 10:36:19 +01:00
ZodiusInfuser ea460f9519 Micropython bindings and example for MSA301 2021-05-14 10:02:56 +01:00
Phil Howard 37cac5940b Remove relative include paths
This change removes file-relative include paths and adds the project root as a global include path.

* Project root added to CMakeLists.txt so that all targets can find includes
* Project root added micropython.cmake so that targets used by the MicroPython build can find includes

Note: pico-boilerplate projects must set this include path
2021-05-13 12:06:01 +01:00
Phil Howard ae489873ee AS7262 add set_integration_time 2021-05-12 16:04:50 +01:00
ZodiusInfuser a6c738d018 Finished micropython bindings for AS7262, and added example 2021-05-12 16:04:50 +01:00
ZodiusInfuser 5af43311f4 Micropython bindings and minor tweaks for AS7262 2021-05-12 16:04:50 +01:00
Phil Howard cf8f2dfac2 Fix invalid include paths
Fixes paths that only resolve when the top-level directory is named "pimoroni-pico"
and is adjacent to the "micropython" directory when building a MicroPython release.
2021-05-12 11:46:50 +01:00
Philip Howard 5d27dbc711
Merge pull request #137 from pimoroni/driver/st7789
C++ and MP support and example for 1.3" LCD breakout
2021-05-10 08:59:19 +01:00
Philip Howard 5a60c477ac
Merge pull request #121 from graeme-winter/set-pixels-as-image
Set pixels as image, add show_bitmap_1d(), show_text()
2021-05-07 14:26:33 +01:00
ZodiusInfuser 84015d7de9 ST7789 tidyup, incl. whitespace removal 2021-05-07 13:48:56 +01:00
ZodiusInfuser 16106d5596 Micropython bindings for ColourLCD and minor tweaks for ST7789, and RoundLCD 2021-05-07 13:48:51 +01:00
ZodiusInfuser 2be5b11c42 Micropython bindings for small ColourLCD and ST7735 2021-05-07 11:10:47 +01:00
ZodiusInfuser ded2710f90 Micropython binding fixes and example for SGP30 2021-05-06 10:16:10 +01:00
ZodiusInfuser 77ca674ac8 Micropython bindings and minor tweaks for SGP30 2021-05-06 10:01:55 +01:00
ZodiusInfuser 3f379d04e7
C++ and MP support and example for LTR559 breakout (#135)
* C driver and example for LTR559 breakout
* Micropython bindings and example for LTR559
2021-05-06 09:48:17 +01:00
ZodiusInfuser 7d3eb60b33
C++ and MP support and example for Trackball breakout (#134)
* C and Micropython bindings for trackball
* C and Micropython examples for trackball
2021-05-04 22:29:53 +01:00
ZodiusInfuser 69ba1c88ef
C++ and MP support and examples for Dotmatrix breakout (#133)
* C driver for LTP305 breakout
* Micropython bindings for LTP305 breakout
* Micropython examples for dotmatrix
* C++ examples for dotmatrix

Co-authored-by: Phil Howard <phil@gadgetoid.com>
2021-05-04 10:34:52 +01:00
Phil Howard 8a15da1f66 Move scroll_text, show_text, bitmap_1d and set_pixels into C++ library
Move scroll_text into the C++ library and make it support std::string.

Move show_bitmap_1d to set_bitmap_1d in the C++ library. Use it as the basis for show_text and scroll_text.

Change show_text to set_text since it does not implicitly show the result.

Add a new pico-scroll demo to show off the scrolling text functionality.
2021-04-22 20:00:25 +01:00