SPI devices: MCP3008 - Is included by the standard package from the CODESYS Store PiFace - Is included by the standard package from the CODESYS Store PiFace as IODriver - Is included by the standard package from the CODESYS Store PiFace Control and Display - Is included by the standard package from the CODESYS Store (3.5SP6 Release) MCP23S17 - Is included by the standard package from the CODESYS Store (3.5SP6Patch30 Release) LCD4x20N Character Display MAX7219 Library MAX7219 MCP3202 Library 2 ana inputs 12bits on SPi bus: MCP3202 MCP3202 Library Monarco.io 3-IO driver for the Monarco Hat by Monarco.io
It has an internal statemachine inside the _iState, dont know if this was neccesary but i think the symbolic status of the device changes if it isnt "10" ?
It has a TON Timer of 50ms before Writing a measurement request ( i´ve only tested the No-Hold commands ).
The internal state machine has these states:
10: Write Temp measurement command -> Send to state 11.
11: Read/wait for respons, when respons is found -> Send to state 20.
20: Write Humidity measurement command -> Send to State 21.
21: Read/wait for respons, when respons if found -> Send to state 10.
Every read checks the statusbit of the second byte, to check if it is the correct measurement that is read(temp/humidity), and sets or resets the xTempValid and xHumidityValid booleans.
It dont use the checksum.
After a Temperature measurement request is sent, a 100ms TON is set, before doing a Read, same with Humidity Measurement, but only 40ms.
If the read isnt successfull it will try again in the next cycle.
I tried withouth these timers with 4ms cycle time. On the 17th Temperature read (68ms) I got a respons from the sensor, and the 7th Humidity read (28ms).
So to take some cycles of the Cpu and the bus, i think its the right way to go. But you could probably go down to ~65-70ms for a temperature read and ~30ms for a Humidity.
It also has a internal watchdog timer, which is needed if it doesnt get a respons at all (i made a short between the SCL/SDA lines and it got stuck in a reading state), when it runs out, it starts from _iState 0 (complete restart).
If you dont specify a I2C address, in _iState 0 it automatically sets the address 0x40 (decimal 64), which is specified in the SHT21 manual.
Its probably not the best written library but it works very well.
Hope it will be of some use to someone.
MAX7219 which enables to drive up to 20 casceded (daisy chained) MAX7219 devices
(7-segment displays as well as 64-LED matrices).
Following functions are included:
- Display Test
- Set number of digits
- Shutdown mode
- Set brightness/intensity
- Clear Digit or Row
- Clear all segments/LEDs of a device
- Write particular segments of digits
- Write BCD numbers
- Write characters
- Write multi-digit integer
- Write multi-digit floats
- Write particular LEDs in row
- init device
- all necessary methods to set up SPI communication and data transfer
A device description file is also part the library.
For first impression see attached screen shots.
I would like to share this library if there is interest (no engagement).
Update to 1.0.0.1 Version include:
Extension of device description file:
Icon added
Initialization parameters for devices:
Intensity level
Number of digits of the device
Shutdown
Display Test
Clear Device
Extension of “Initialize”-method in library with setting of above mentioned parameters
because i had some problems with the standard Adafruit PWM and made my own version.
Sometimes i need the PWMs and / or the servo control function.
Use a Array[0..15] to send values from 0 - 100 for PWM function or 101 - 200 for servo control (1.01 to 2.00 ms Pulse)
I added a accessible trim function for servo pulse finetuning.
The State shows if the device is present and accessible.
The IN shows the actual frequency register value.
A library for UPS PIco for Raspberry Pi. Includes the following functions:
- read voltage
- read temperature
- read analog inputs
- read other parameters
- control LEDs
- control of cooler (including automatic control based on temperature)
- Still Alive Timer (watchdog which will reboot the Raspberry Pi if your code will stop)
- initial configuration of the device out of your code
Here is a library I made for the device LSM9DS1, an Accelerometer/Gyro/Magnetometer form ST life.augmented, on a break-out board from Adafruit. (I had to zip the library-file since the size was more than 500kB, which is maximum upload file-size for this forum.)
The device has actually two slaves, but I chose to integrate them both with on device-description. It doesn't matter if the user assigns a slave address in the project, the code in the library alters anyway between two different slave-addresses when writing/reading data.
Though the device has built-in FIFO-registers, for faster and less time-/power-consuming readouts, I have not used this option in this version of the library. Instead, the readout is timer-controlled, with a user-specified read-rate.
Here is my Library for some I2C devices for CODESYS.
You can place all devices behind a multiplexer to reduce address conflicts.
Although include the BME280 Environment sensor and an SD1306 Display Driver.
Look at google for these little funny Displays.
All fonts are working on the display, but not the biggest. There the bits have to be twisted.
If you find any problems, tell me, the Drives have not been tested all.
Don't look at the documentation, there is none ... .
In the I2C_Base FB I did write some info’s for the muxing.
With the muxing IC you can connect about 33554432 BME280 on the raspi, but then bus cycle time is no longer a problem .
You will need the OSCAT building lib to compile. i can not uplode it here like the OSCAT BASIC lib(to big), so try the lib from the store.
Device list:
BME280
25C512 64KiB EEPROM
An 4channel dimmer (I done this for an friend)
PCA9555 as 16 bit input
PCA9555 as 16 bit output
PCA9685 a 16 channel 12bit PWM output, inspired by example code of CODESYS but writes only when output value is changing
PCF8575 as 16 bit input
PCF8575 as 16 bit output
SSD1306 Display Driver
TCA9548 8 channel I2C Multiplexer/switch https://github.com/stefandreyer/I2C-Multiplex
TSL2561 lux sensor, state I would say experimental
There is a simple example how to generate a QR-code and show it in web-visu: Example_QrCode_RPI.projectarchive
Image Image
Requirements:
You need to install qrencode:
sudo apt-get install qrencode
You need to install OwenStringUtils library. It included in projectarchive or you can install it separately: download
It's nice lib with additional string functions like ASCII/Unicode conversion, formatting and parsing.
In example used SysProcess library.
So you need to add in /etc/CODESYSControl_User.cfg next lines:
[SysProcess]
Command=AllowAll
Keep in mind that you need to have write access rights:
sudo chmod 0666 /etc/CODESYSControl_User.cfg
You need to set write access rights for /visu directory:
sudo chmod 0666 /var/opt/codesys/PlcLogic/visu
You can see qr-code in web-visu, but not in service-visu (CODESYS IDE-visu).
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
List of available drivers
SPI devices:
MCP3008 - Is included by the standard package from the CODESYS Store
PiFace - Is included by the standard package from the CODESYS Store
PiFace as IODriver - Is included by the standard package from the CODESYS Store
PiFace Control and Display - Is included by the standard package from the CODESYS Store (3.5SP6 Release)
MCP23S17 - Is included by the standard package from the CODESYS Store (3.5SP6Patch30 Release)
LCD4x20N Character Display
MAX7219 Library MAX7219
MCP3202 Library 2 ana inputs 12bits on SPi bus: MCP3202
MCP3202 Library Monarco.io 3-IO driver for the Monarco Hat by Monarco.io
I2C devices:
SRF02 Ultra sonic range finder - Is included by the standard package from the CODESYS Store
AK8975 Compass - Is included by the standard package from the CODESYS Store
MPU9150 Gyro- Is included by the standard package from the CODESYS Store
MPU6050 Gyro- Is included by the standard package from the CODESYS Store
AdafruitPWM - Is included by the standard package from the CODESYS Store
Arduino UNO IO Device Description and Library
Adafruit LCD Plate Device Description and Library
MCP23017 16-Bit I/O Port-Expander Device Description and Library
PCF8574 8-Bit I/O Port-Expander Device Description and Library
PCF8591 4 Channel, 8bit Analog to Digital converter Device Description and Library
PiChips 4 PWM I2C Device
SHT21 Humidity & Temperature Sensor
UPSPIco library
DS1803 potentiometer
MCP4725 DAC
LSM9DS1, an Accelerometer/Gyro/Magnetometer
LSM303 accelerometer and Magnetometer
MCP4728 4-Channel 12-bit DAC
PCF8574_LCD.library
RETAIN data support library for mcp7941x on Raspberry Pi
Reading QR Code
BME28025C512 64KiB EEPROMAn 4channel dimmer (I done this for an friend)PCA9555 as 16 bit inputPCA9555 as 16 bit outputPCA9685 a 16 channel 12bit PWM output, inspired by example code of CODESYS but writes only when output value is changingPCF8575 as 16 bit inputPCF8575 as 16 bit outputSSD1306 Display DriverTCA9548 8 channel I2C Multiplexer/switchTSL2561 lux sensor, experimental
1-wire:
DS18B20 - Is included by the standard package from the CODESYS Store (3.5SP5Patch2 release)
others:
PiCam - Is included by the standard package from the CODESYS Store
more posts ...
Arduino UNO IO Library for Codesys on Raspberry Pi
Author: Gerhard Schillhuber
Date: 11.09.2014
Version: 1.1.0.0
I2CArduinoUno.zip [908.62 KiB]
documentation.pdf [622.75 KiB]
Adafruit LCD Plate (http://www.adafruit.com/products/1110)
Author: jjsmith88
Date: 12.11. 2014
Version: 1.1.0.0
Raspberry I2C AdafruitLCDPlatev1.0.0.1.library [383.08 KiB]
LCD_Test_Project_v1.0.0.1.project [122.41 KiB]
AdafruitLCDPlatev1.0.0.1.devdesc.xml [2.34 KiB]
4x20 Character LCD
Author: Werner Hinterseer, Lambda GmbH & Co. KG
Date: 21.09.2014
Version: 2.0.0.0
LCD4x20N_Demo.project [120.09 KiB]
LCD4x20N.library [336.82 KiB]
Documentation LCD4x20N Library.pdf [94.43 KiB]
LCD4x20N.devdesc.xml [2.41 KiB]
Author: madax
Date: 05.10. 2014
Version: 1.0.0.0
raspi_i2c.project [113.74 KiB]
MCP23017.devdesc.xml [2.48 KiB]
I2C_MCP23017.library [327.3 KiB]
Author: madax
Date: 05.10. 2014
Version: 1.0.0.0
raspi_i2c.project [113.74 KiB]
PCF8574.devdesc.xml [2.48 KiB]
I2C_PCF8574.library [325.88 KiB]
Author: madax
Date: 05.10. 2014
Version: 1.0.0.0
raspi_i2c.project [113.74 KiB]
PCF8591.devdesc.xml [2.47 KiB]
I2C_PCF8591.library [325.22 KiB]
Author: madax
Date: 21.10. 2014
Version: 1.1.0.0
PiChips 4 PWM I2C device.
Tested with 100kHz and 3,3V on a L272 as H-Bridge with default settings on the eeprom.
I2C_PiChips16.library [329.05 KiB]
PiChips016.devdesc.xml [2.48 KiB]
Author: Erikk
Date: 16.2. 2015
Version: 1.0.0.0
I´ve attached my library for the SHT21.
It has an internal statemachine inside the _iState, dont know if this was neccesary but i think the symbolic status of the device changes if it isnt "10" ?
It has a TON Timer of 50ms before Writing a measurement request ( i´ve only tested the No-Hold commands ).
The internal state machine has these states:
10: Write Temp measurement command -> Send to state 11.
11: Read/wait for respons, when respons is found -> Send to state 20.
20: Write Humidity measurement command -> Send to State 21.
21: Read/wait for respons, when respons if found -> Send to state 10.
Every read checks the statusbit of the second byte, to check if it is the correct measurement that is read(temp/humidity), and sets or resets the xTempValid and xHumidityValid booleans.
It dont use the checksum.
After a Temperature measurement request is sent, a 100ms TON is set, before doing a Read, same with Humidity Measurement, but only 40ms.
If the read isnt successfull it will try again in the next cycle.
I tried withouth these timers with 4ms cycle time. On the 17th Temperature read (68ms) I got a respons from the sensor, and the 7th Humidity read (28ms).
So to take some cycles of the Cpu and the bus, i think its the right way to go. But you could probably go down to ~65-70ms for a temperature read and ~30ms for a Humidity.
It also has a internal watchdog timer, which is needed if it doesnt get a respons at all (i made a short between the SCL/SDA lines and it got stuck in a reading state), when it runs out, it starts from _iState 0 (complete restart).
If you dont specify a I2C address, in _iState 0 it automatically sets the address 0x40 (decimal 64), which is specified in the SHT21 manual.
Its probably not the best written library but it works very well.
Hope it will be of some use to someone.
SHT21 Humidity & Temperature Sensor
I2C_SHT21.library [348.46 KiB]
SHT21.devdesc.xml [2.35 KiB]
Hello Can I have an example? a project to test? I used that for my AM2315 (address 0x5c) but codesys crash when I go online mode ...
Author: Oleg Wagner
Date: 3.09.2015
Version: 1.0.0.1
MAX7219 which enables to drive up to 20 casceded (daisy chained) MAX7219 devices
(7-segment displays as well as 64-LED matrices).
Following functions are included:
- Display Test
- Set number of digits
- Shutdown mode
- Set brightness/intensity
- Clear Digit or Row
- Clear all segments/LEDs of a device
- Write particular segments of digits
- Write BCD numbers
- Write characters
- Write multi-digit integer
- Write multi-digit floats
- Write particular LEDs in row
- init device
- all necessary methods to set up SPI communication and data transfer
A device description file is also part the library.
For first impression see attached screen shots.
I would like to share this library if there is interest (no engagement).
Update to 1.0.0.1 Version include:
Extension of device description file:
Extension of “Initialize”-method in library with setting of above mentioned parameters
Raspberry SPI MAX7219_1001.rar [544.94 KiB]
Raspberry SPI MAX7219.rar [447.2 KiB]
because i had some problems with the standard Adafruit PWM and made my own version.
Sometimes i need the PWMs and / or the servo control function.
Use a Array[0..15] to send values from 0 - 100 for PWM function or 101 - 200 for servo control (1.01 to 2.00 ms Pulse)
I added a accessible trim function for servo pulse finetuning.
The State shows if the device is present and accessible.
The IN shows the actual frequency register value.
PCA9685.devdesc.xml [3.2 KiB]
I2C_PCA9685.library [278.88 KiB]
I added library and xml file and I get 58 errors and placeholder not resolved
Author: PhilipLykov
Date: 12.10. 2015
Version: 1.0.0.0
A library for UPS PIco for Raspberry Pi. Includes the following functions:
- read voltage
- read temperature
- read analog inputs
- read other parameters
- control LEDs
- control of cooler (including automatic control based on temperature)
- Still Alive Timer (watchdog which will reboot the Raspberry Pi if your code will stop)
- initial configuration of the device out of your code
UPSPIco.project [177.26 KiB]
I2C_UPSPIco.library [381.52 KiB]
UPSPIco.devdesc.xml [2.42 KiB]
Author: galexis
Date: Sun Apr 17, 2016
Version: 1.0.0.0
librarie for DS1803 i2C 2 potentiometer output
DS1803.devdesc.xml [2.31 KiB]
I2C_DS1803.compiled library [160.36 KiB]
I2C_DS1803.library [304.19 KiB]
Author: johan76swart
Date: 17.06. 2016
Version: 1.0.0.0
MCP4725 digital to analog converter
Input an integer 0-4095(12-bitDAC)
MCP4725.devdesc.xml [2.37 KiB]
I2C_MCP4725.library [329.81 KiB]
Autor: galexis
Date: 16.11. 2016
Version: 1.0.0.0
MCP3202: Rpi 1:
pin1 > pin 24
pin5 > pin 19
pin6 > pin 21
pin7 > pin 23
SPI_MCP3202.library [300.62 KiB]
MCP3202.devdesc.xml [2.44 KiB]
Author: Dag H. Hanssen
Date: 09.05.2017
Here is a library I made for the device LSM9DS1, an Accelerometer/Gyro/Magnetometer form ST life.augmented, on a break-out board from Adafruit. (I had to zip the library-file since the size was more than 500kB, which is maximum upload file-size for this forum.)
The device has actually two slaves, but I chose to integrate them both with on device-description. It doesn't matter if the user assigns a slave address in the project, the code in the library alters anyway between two different slave-addresses when writing/reading data.
Though the device has built-in FIFO-registers, for faster and less time-/power-consuming readouts, I have not used this option in this version of the library. Instead, the readout is timer-controlled, with a user-specified read-rate.
I have also uploaded a very simple test-project.
Hope someone finds the library useful,
Dag Hansa
Testing_LSM9DS1.project [120.94 KiB]
I2C_LSM9DS1 library file.zip [202.45 KiB]
LSM9DS1.devdesc.xml [2.51 KiB]
Autor: raymondclark0
Date: 09.05. 2017
Version: 1.1.0.0
My Library for the ST LSM303 accel magnetometer board avaliable from Adafruit.
Separate device files, but combined library.
Attached is an example project too.
Thanks,
Ray.
I2C_LSM303.library [310.79 KiB]
LSM303.project [156.54 KiB]
LSM303_Accel.devdesc.xml [2.33 KiB]
LSM303_Mag.devdesc.xml [2.33 KiB]
Autor: Stefan2
Date: 17.11. 2017
Version: 1.0.0.0
Hello,
Here is my Library for some I2C devices for CODESYS.
You can place all devices behind a multiplexer to reduce address conflicts.
Although include the BME280 Environment sensor and an SD1306 Display Driver.
Look at google for these little funny Displays.
All fonts are working on the display, but not the biggest. There the bits have to be twisted.
If you find any problems, tell me, the Drives have not been tested all.
Don't look at the documentation, there is none ... .
In the I2C_Base FB I did write some info’s for the muxing.
With the muxing IC you can connect about 33554432 BME280 on the raspi, but then bus cycle time is no longer a problem .
You will need the OSCAT building lib to compile. i can not uplode it here like the OSCAT BASIC lib(to big), so try the lib from the store.
Device list:
BME280
25C512 64KiB EEPROM
An 4channel dimmer (I done this for an friend)
PCA9555 as 16 bit input
PCA9555 as 16 bit output
PCA9685 a 16 channel 12bit PWM output, inspired by example code of CODESYS but writes only when output value is changing
PCF8575 as 16 bit input
PCF8575 as 16 bit output
SSD1306 Display Driver
TCA9548 8 channel I2C Multiplexer/switch
https://github.com/stefandreyer/I2C-Multiplex
TSL2561 lux sensor, state I would say experimental
Greetings Stefan
Raspberry I2C MUX_update.projectarchive [416.51 KiB]
Raspberry I2C MUX.projectarchive [388.84 KiB]
BASIC.projectarchive [398.68 KiB]
xml devices.zip [18.38 KiB]
Autor: johan76swart
Date: 25.07. 2018
Version: 1.0.0.0
Hello fellow Raspberry enthusiast!
Here is a device library for the MCP4728 4-Channel 12-bit DAC, default address = 0x60.
Input an integer 0-4095 for each channel.
MCP4728.devdesc.xml [2.38 KiB]
I2C_MCP4728.library [335.03 KiB]
I did implementing an MQTT library, test it an have fun…
Greatings
Short info from short doku...:
please start here:
https://github.com/stefandreyer m
MQTT.projectarchive [787.6 KiB]
Autor: Aliazzz
Date: 11.02. 2018
Version: 2.0.0.0
Monarco.io
Codesys Application Composer "FirstSteps" Example implemented with the Monarco V2.0.0.0 Library;
https://github.com/Aliazzzz/Monarco-HAT ... FirstSteps m
Author: Reinhard Hesse
Date: 13.08.2019
Version: 1.0.0.0
Library for I2C – PCF8574 LCD contains:
02_Lib -Library
03_LCD_Basic - Example Project
04_LCD_Visu -Example Project
01_XML Device Description
I2C-LCD mit CODESYS.pdf documentation
Fertig.zip [2.35 MiB]
Autor: e.kislov
Date: 5/2019
Link to the post(including attachements):
l viewtopic.php?f=23&t=9760 l
There is a simple example how to generate a QR-code and show it in web-visu: Example_QrCode_RPI.projectarchive
Image Image
Requirements:
sudo apt-get install qrencode
You need to install OwenStringUtils library. It included in projectarchive or you can install it separately: download
It's nice lib with additional string functions like ASCII/Unicode conversion, formatting and parsing.
In example used SysProcess library.
So you need to add in /etc/CODESYSControl_User.cfg next lines:
[SysProcess]
Command=AllowAll
Keep in mind that you need to have write access rights:
sudo chmod 0666 /etc/CODESYSControl_User.cfg
sudo chmod 0666 /var/opt/codesys/PlcLogic/visu