| .. | ||
| grove_dht_pro | ||
| grove_rgb_lcd | ||
| grove_button.cpp | ||
| grove_buzzer.cpp | ||
| grove_led_blink.cpp | ||
| grove_led_fade.cpp | ||
| grove_light_sensor.cpp | ||
| grove_relay.cpp | ||
| grove_rotary_angle_sensor.cpp | ||
| grove_sound_sensor.cpp | ||
| grovepi.cpp | ||
| grovepi.h | ||
| grovepi_analog_read.cpp | ||
| grovepi_analog_write.cpp | ||
| grovepi_digital_read.cpp | ||
| grovepi_digital_write.cpp | ||
| grovepi_us_read.cpp | ||
| grovepicpp_0.1.1.tar.gz | ||
| README.md | ||
| tar_archive.PNG | ||
License
The MIT License (MIT)
GrovePi for the Raspberry Pi: an open source platform for connecting Grove Sensors to the Raspberry Pi. Copyright (C) 2017 Dexter Industries
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
GrovePi C++ library
This library provides the basic functions for using the GrovePi in C++. See more about the GrovePi here: https://www.nuget.org/packages/GrovePi/
To install package:
First of all, you have to cd to ../GrovePi/Software/Cpp
$ tar -xzvf grovepicpp_0.1.1.tar.gz
$ cd grovepicpp_0.1.1
$ sudo dpkg --install ./grovepicpp_0.1.1.deb
The package contains the following sources:
- grovepi.cpp
- grove_dht_pro.cpp
- grove_rgb_lcd.cpp
To uninstall package:
$ sudo dpkg --remove grovepicpp
To compile with package installed:
g++ -Wall [dependencies[,..]].cpp -lgrovepicpp -o [program_name].out// the general format
g++ -Wall grove_relay.cpp -lgrovepicpp -o grove_relay.out // a trivial example
To compile without package:
g++ -Wall grovepi.cpp [dependencies[,..]].cpp -o [program_name].out // the general format
g++ -Wall grovepi.cpp grove_relay.cpp -o grove_relay.out // a trivial example
Then run the executable:
$ ./[program_name].out
The basic library functionalities of GrovePi are:
initGrovePi(): function for initializing communication w/ the GrovePi. It uses the implicit address of0x04initDevice(uint8_t address): function for initializing communication with a device at a specificaddressdelay(milliseconds) : function for delaying given millisecondspinMode(uint8_t pin, uint8_t mode): function for setting a digital/analog port accordingly.mode=INPUT/OUTPUTdigitalWrite(uint8_t pin, bool value): function for writingHIGH/LOWvalues to a digital portdigitalRead(uint8_t pin): function for returning the digital value (eitherHIGH/LOW) read on the given pinanalogWrite(uint8_t pin, uint8_t value): function for writing an analog value from 0-255 to a given pinanalogRead(uint8_t pin): function for reading the value on a given pin and which returns a value from 0-255ultrasonicRead(uint8_t pin): function for returning the distance in centimeters an ultrasonic sensor reads on a given digital port pinsetMaxI2CRetries(int _max_i2c_retries): function for setting the maximum number of retries before quitting current operation - you should not use itsetGrovePiAddress(uint8_t addr): change the implicit GrovePi address -> this doesn't change the GrovePi's address (firmware-wise & physically), but it's only setting the address at which GrovePi is reachable - you should not use itwriteBlock(uint8_t command, uint8_t pin_number, uint8_t opt1 = 0, uint8_t opt2 = 0): function for issuing a command to the GrovePi. The command is targeting a certain pin. The optional arguments can be anything depending on the command. (for example for analogWriting, we would use opt1 for sending the value we want to write)writeByte(uint8_t byte_val): it only sends a byte to the GrovePi. You can compose thewriteBlockfunction by using multiple calls of this functionreadBlock(uint8_t *data_block): returns via the pointer the read data from GrovePi. The length of the array is returned by the functionreadByte(): returns a byte from GrovePi
Attention:
- it's currently not supported to use multiple I2C devices with this library, unless you reinitialize communication with the device you want to talk to (w/
initgrovePi()orinitDevice(uint8_t address) - for any of the given functions in this library, if an error occurs on the I2C line, a
GrovePi::I2CError()is thrown.GrovePi::I2CError()is derived fromstd::runtime_error - the library is included in
GrovePinamespace, so don't forget to use the resolution operator or theusingcommand.
How to create a deb package:
Extract the tar package and cd into its directory. The folders' hierarchy is this.
You'll see that in the source folder there are the source files along with the .o object files and .so files (which are the shared libraries).
In order to generate the shared libraries we need to follow the next steps
Step 1
Compile all the .cpp files into position independent code (object files) which are required for creating a shared library:
g++ -C -Wall -Werror -fpic [cppfile]
Run the following command to create a shared library:
g++ -shared -o libshared.so [list of .o files]
The name of the library must have at all times the prefix lib and the suffix .so. The rest of it is the name of the library. This means that this libgrovepicpp.so file name suggests that our library is called grovepicpp.
After we're done with it, we have to copy the shared library to the grovepicpp_x.y.z/usr/lib folder.
Step 2
Copy all the header files from the source folder to grovepicpp_x.y.z/usr/include (make sure you clean the include folder).
Step 3
Open control file from grovepicpp_x.y.z/DEBIAN/ folder and modify the version accordingly.
Let's say we have a version like this: 0.2.1:
- the first digit represents a major release: like a complete redesign or architecture. It's generally accepted that
0as a "major release" actually means that the release it's yet to be completed. We'll have it this way as long as we don't have a versioning scheme in all of our repo(s) - the second digit represents a new feature added to the current architectural scheme
- the third digit represents a bug-fix / a really small change / and so on.
Also, please modify all the other folders name according to the version number.
Step 4
Go at the directory level where you can see the 2 main folders: grovepicpp_x.y.z & source.
We need to create the actual package and and we'll type:
dpkg-deb --build grovepicpp_x.y.z/
Step 5
cd out of that folder and archive the folder (with its all files) with the command:
tar -csvf grovepicpp_x.y.z.tar.gz grovepicpp_x.y.z/