Coder Social home page Coder Social logo

epsilonrt / piduino Goto Github PK

View Code? Open in Web Editor NEW
29.0 3.0 7.0 3.96 MB

Arduino API on Pi boards, the best of both worlds !

Home Page: https://epsilonrt.fr/2019/01/piduino/

License: GNU Lesser General Public License v3.0

CMake 6.82% Shell 0.52% PLpgSQL 0.83% C++ 83.88% C 3.22% Objective-C 3.50% Roff 1.22%
arduino raspberry-pi nanopi orange-pi banana-pi

piduino's Introduction

PiDuino

Arduino on Pi boards, the best of both worlds !

Abstract

PiDuino is a C ++ library for Pi boards that allows the use of I/O like GPIO, I2C, SPI, UART ... with an API as close as possible to the Arduino language.
The description of Pi cards uses a stored "Object" model in a database that allows to add new models of boards easily.

At this time, the SoC models supported are AllWinner H-Series and Broadcom BCM2708 through 2711 which allows it to be used on Raspberry Pi and most Nano Pi, Orange Pi and Banana Pi.

The updated list of all the boards in the database is available in the Wiki.

To learn more about PiDuino, you can follow the Wiki, but if you're in a hurry, let's go to the quick start version...

Quickstart guide

The fastest and safest way to install piduino on Armbian is to use the APT repository from piduino.org, so you should do the following :

wget -O- http://www.piduino.org/piduino-key.asc | sudo gpg --dearmor --yes --output /usr/share/keyrings/piduino-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/piduino-archive-keyring.gpg] http://apt.piduino.org buster piduino" | sudo tee /etc/apt/sources.list.d/piduino.list
sudo apt update
sudo apt install libpiduino-dev piduino-utils

This repository provides Piduino packages for armhf and arm64 architectures. In the above commands, the repository is a Debian Buster distribution, but you can also choose Buster, Ubuntu Xenial or Bionic by replacing buster with bullseye, xenial, trusty, bionic, focal, jammy.
For Raspbian you have to do a little different :

wget -O- http://www.piduino.org/piduino-key.asc | sudo gpg --dearmor --yes --output /usr/share/keyrings/piduino-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/piduino-archive-keyring.gpg] http://raspbian.piduino.org buster piduino" | sudo tee /etc/apt/sources.list.d/piduino.list
sudo apt update
sudo apt install libpiduino-dev piduino-utils

The Raspbian repository provides Piduino packages for armhf architecture for Stretch and Buster only.

If you want to build from sources, you can follow the Wiki.

Utilities

Once installed, you should run the following on the command line :

$ pinfo
Name            : NanoPi Core2 Mini Shield
Family          : NanoPi
Database Id     : 40
Manufacturer    : Friendly ARM
Board Tag       : nanopineocore2shield
SoC             : H5 (Allwinner)
Memory          : 1024MB
GPIO Id         : 9
I2C Buses       : /dev/i2c-0
SPI Buses       : /dev/spidev1.0
Serial Ports    : /dev/ttyS1

As we can imagine, in the example, we are on a NanoPi Neo Core2 connected to a Mini Shield.

To read the pin status of connector 1, run the following on the command line :

$ pido readall 1
                                          CON1 (#1)
+-----+-----+----------+------+------+---+----++----+---+------+------+----------+-----+-----+
| sOc | iNo |   Name   | Mode | Pull | V | Ph || Ph | V | Pull | Mode |   Name   | iNo | sOc |
+-----+-----+----------+------+------+---+----++----+---+------+------+----------+-----+-----+
|     |     |     3.3V |      |      |   |  1 || 2  |   |      |      | 5V       |     |     |
|  12 |   8 |  I2C0SDA | ALT2 |  OFF |   |  3 || 4  |   |      |      | 5V       |     |     |
|  11 |   9 |  I2C0SCK | ALT2 |  OFF |   |  5 || 6  |   |      |      | GND      |     |     |
|  91 |   7 |  GPIOG11 |  OFF |  OFF |   |  7 || 8  |   | OFF  | ALT2 | UART1TX  | 15  | 86  |
|     |     |      GND |      |      |   |  9 || 10 |   | OFF  | ALT2 | UART1RX  | 16  | 87  |
|   0 |   0 |   GPIOA0 |  OFF |  OFF |   | 11 || 12 |   | OFF  | OFF  | GPIOA6   | 1   | 6   |
|   2 |   2 |   GPIOA2 |  OFF |  OFF |   | 13 || 14 |   |      |      | GND      |     |     |
|   3 |   3 |   GPIOA3 |  OFF |  OFF |   | 15 || 16 |   | OFF  | ALT2 | UART1RTS | 4   | 88  |
|     |     |     3.3V |      |      |   | 17 || 18 |   | OFF  | ALT2 | UART1CTS | 5   | 89  |
|  15 |  28 | SPI1MOSI | ALT2 |  OFF |   | 19 || 20 |   |      |      | GND      |     |     |
|  16 |  24 | SPI1MISO | ALT2 |  OFF |   | 21 || 22 |   | OFF  | OFF  | GPIOA1   | 6   | 1   |
|  14 |  29 |  SPI1CLK | ALT2 |  OFF |   | 23 || 24 |   | OFF  | ALT2 | SPI1CS   | 27  | 13  |
|     |     |      GND |      |      |   | 25 || 26 |   | OFF  | OFF  | GPIOA17  | 11  | 17  |
+-----+-----+----------+------+------+---+----++----+---+------+------+----------+-----+-----+
| sOc | iNo |   Name   | Mode | Pull | V | Ph || Ph | V | Pull | Mode |   Name   | iNo | sOc |
+-----+-----+----------+------+------+---+----++----+---+------+------+----------+-----+-----+

pido and pinfo come with manpages...

Blink Example

Arduino programming on Pi board ? We are going there !

#include <Piduino.h> // all the magic is here ;-)

const int ledPin = 0; // Header Pin 11: GPIO17 for RPi, GPIOA0 for NanoPi

void setup() {
  // initialize digital pin ledPin as an output.
  pinMode (ledPin, OUTPUT);
}

void loop () {
  // Press Ctrl+C to abort ...
  digitalWrite (ledPin, HIGH);  // turn the LED on (HIGH is the voltage level)
  delay (1000);                 // wait for a second
  digitalWrite (ledPin, LOW);   // turn the LED off by making the voltage LOW
  delay (1000);                 // wait for a second
}

Obviously, you need to know the pin number where you connected the LED !

$ pido readall 1
                                          CON1 (#1)
+-----+-----+----------+------+------+---+----++----+---+------+------+----------+-----+-----+
| sOc | iNo |   Name   | Mode | Pull | V | Ph || Ph | V | Pull | Mode |   Name   | iNo | sOc |
+-----+-----+----------+------+------+---+----++----+---+------+------+----------+-----+-----+
|     |     |     3.3V |      |      |   |  1 || 2  |   |      |      | 5V       |     |     |
|  12 |   8 |  I2C0SDA | ALT2 |  OFF |   |  3 || 4  |   |      |      | 5V       |     |     |
|  11 |   9 |  I2C0SCK | ALT2 |  OFF |   |  5 || 6  |   |      |      | GND      |     |     |
|  91 |   7 |  GPIOG11 |  OFF |  OFF |   |  7 || 8  |   | OFF  | ALT2 | UART1TX  | 15  | 86  |
|     |     |      GND |      |      |   |  9 || 10 |   | OFF  | ALT2 | UART1RX  | 16  | 87  |
|   0 |   0 |   GPIOA0 |  OFF |  OFF |   | 11 || 12 |   | OFF  | OFF  | GPIOA6   | 1   | 6   |
|   2 |   2 |   GPIOA2 |  OFF |  OFF |   | 13 || 14 |   |      |      | GND      |     |     |
|   3 |   3 |   GPIOA3 |  OFF |  OFF |   | 15 || 16 |   | OFF  | OFF  | GPIOG8   | 4   | 88  |
|     |     |     3.3V |      |      |   | 17 || 18 |   | OFF  | OFF  | GPIOG9   | 5   | 89  |
|  22 |  12 |   GPIOC0 |  OFF |  OFF |   | 19 || 20 |   |      |      | GND      |     |     |
|  23 |  13 |   GPIOC1 |  OFF |  OFF |   | 21 || 22 |   | OFF  | OFF  | GPIOA1   | 6   | 1   |
|  24 |  14 |   GPIOC2 |  OFF |  OFF |   | 23 || 24 |   | UP   | OFF  | GPIOC3   | 10  | 25  |
+-----+-----+----------+------+------+---+----++----+---+------+------+----------+-----+-----+
| sOc | iNo |   Name   | Mode | Pull | V | Ph || Ph | V | Pull | Mode |   Name   | iNo | sOc |
+-----+-----+----------+------+------+---+----++----+---+------+------+----------+-----+-----+

The iNo column corresponds to the 'Arduino' number, the number 0 pin corresponds therefore at pin 11 of the GPIO connector (GPIOA0).

To build, you must type the command:

$ g++ -o blink blink.cpp $(pkg-config --cflags --libs piduino)

You can then execute the program :

$ sudo ./blink

sudo is necessary for an access to the memory mapping of the GPIO). You can enable the setuid bit to avoid sudo in the future :

$ sudo chmod u+s blink
$ ./blink

With Codelite it's easier and funny, right ?

Debugging with Codelite

You should read the wiki on the examples to learn more...

piduino's People

Contributors

btssn-toulon avatar epsilonrt avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

piduino's Issues

Std error

I still get the same error. I've changed the revision but still I get the std system error

Orange PI PC

Hello!
How can i use piduino on Orange Pi PC? This board based on Allwinner H3.
Thanx

Problem with the compilation (lib)

When you have to compile in geany for exemple, you have to manually add two libs like this:
sudo apt install libcppdb-dev pkg-config cmake libudev-dev
It is present in the wiki page in build from source page.

the CMAKE module does not work

the CMAKE module does not complete the PIDUINO_INCLUDE_DIRS, PIDUINO_LIBRARY_DIRS variables with the correct values.
There is no PIDUINO_LDFLAGS variable.

Arm64 architecture support

Hello,

I tried installing libmodbuspp-dev package on arm64 single board computer. After adding the repository, I get:

pi@bananapi:~/pump_reader$ sudo apt update
Hit:1 http://deb.debian.org/debian buster InRelease
Get:2 http://deb.debian.org/debian-security buster/updates InRelease [34.8 kB]
Get:3 http://deb.debian.org/debian buster-backports InRelease [51.4 kB]
Get:4 http://raspbian.piduino.org buster InRelease [2835 B]
Get:5 http://deb.debian.org/debian-security buster/updates/main Translation-en [313 kB]
Fetched 402 kB in 2s (188 kB/s)
Reading package lists... Done
Building dependency tree
Reading state information... Done
All packages are up to date.
N: Skipping acquire of configured file 'piduino/binary-arm64/Packages' as repository 'http://raspbian.piduino.org buster InRelease' doesn't support architecture 'arm64'

Would it be possible to support arm64 architecture in your repository? Or is the recommended approach to build the library from source?

It seems that this system is not supported !: Operation not supported

Hi!

At first, thanks for you great work.

I have to communicate with 3 sensors from Sparkfun.
They provide nice libs for the sensors but only for Arduino, so i am searching for exact some kind of library like yours. Sadly, i am not entirely able to port the libs myself to c++ code that can be used in linux, so your lib comes in handy.

Sadly, i got an issue while with my RPI 4.
I am able to complie your lib within my code, but executing the resulting program outputs:

terminate called after throwing an instance of 'std::system_error'
what(): It seems that this system is not supported !: Operation not supported
Abgebrochen

When i run "pinfo", its the same.
(And of course, "pido" also)

I tried to force the board-revision via /etc/piduino.conf, but i seems that piduino does not even care.
(same error)

I than tried to add my RPI4 to the /usr/share/piduino/piduino.db
What i added:
Table board: 45 | RaspberryPi 4 B | 4096 | 1.1 | 3 | 3 | 1 | 1 | 0 | 0
Table board_model: 22 | RaspberryPi 4 B | 0 | 5
Table soc: 5 | BCM2835 | 0 | 0 | 2 | 1 | 1
Table revision: 45 | 10498321

("10498321" is revision "a03111" (hex) to dec)

But again, piduino gives me the "not supported" message.
I dont know, if i have entered alle the values correct, but i felt like a fill-in-the-blank text, so it cant be that wrong.
(See attached piduino.db, if you want - piduino.zip)

I than compiled piduino myself from source: same error.

It seems forcing the revision is not possible and adding the RPI manually to the DB also not.
Am i doing somesting wrong?

I am using latest Raspbian Buster image.

I would be so glad if you would try to help me here.

At last, here is an output of /proc/cpuinfo, if you need it.

processor : 0
model name : ARMv7 Processor rev 3 (v7l)
BogoMIPS : 108.00
Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part : 0xd08
CPU revision : 3

processor : 1

model name : ARMv7 Processor rev 3 (v7l)
BogoMIPS : 108.00
Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part : 0xd08
CPU revision : 3

processor : 2
model name : ARMv7 Processor rev 3 (v7l)
BogoMIPS : 108.00
Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part : 0xd08
CPU revision : 3

processor : 3
model name : ARMv7 Processor rev 3 (v7l)
BogoMIPS : 108.00
Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part : 0xd08
CPU revision : 3

Hardware : BCM2835
Revision : a03111
Serial : 100000002da3ffc0
Model : Raspberry Pi 4 Model B Rev 1.1

TwoWire::endTransmission() does not return the expected value

TwoWire::endTransmission() returns a boolean that is true if successful, then it should return a byte, which indicates the status of the transmission:
0:success
1:data too long to fit in transmit buffer
2:received NACK on transmit of address
3:received NACK on transmit of data
4:other error

Platformio support

Hello,

trying to fix an issue while compiling some code with platformio and piduino. Was working like 2 years ago but now I'm getting an error when linking the library (compiled from sources)

Here the platformio configuration:

[env:raspberrypi_3b]
platform = linux_arm
board = raspberrypi_3b
framework = wiringpi
lib_archive = yes
build_flags =
#-H
-pthread -I/usr/local/include -I/usr/local/include/piduino/arduino -L/usr/local/lib -lpiduino -lcppdb -ldl -ludev -lpthread

Here the error:

In file included from /usr/local/include/piduino/arduino/Arduino.h:289,
from /usr/local/include/piduino/arduino/Piduino.h:116,
from src/sketch.cpp:3:
/usr/local/include/piduino/arduino/Console.h: In function ‘void setup()’:
/usr/local/include/piduino/arduino/Console.h:24:7: warning: inlining failed in call to ‘virtual PiConsole::~PiConsole() noexcept’: call is unlikely and code size would grow [-Winline]
24 | class PiConsole : public Terminal {
| ^~~~~~~~~
src/sketch.cpp:170:15: note: called from here
170 | PiConsole console;
| ^~~~~~~
Linking .pio/build/raspberrypi_3b/program
/usr/bin/ld: .pio/build/raspberrypi_3b/src/sketch.o: in function setup': sketch.cpp:(.text+0x1a0): undefined reference to PiConsole::PiConsole()'
/usr/bin/ld: sketch.cpp:(.text+0x76c): undefined reference to Print::print(__FlashStringHelper const*)' /usr/bin/ld: sketch.cpp:(.text+0x784): undefined reference to Piduino::String::toString(long, unsigned char)'
/usr/bin/ld: sketch.cpp:(.text+0x790): undefined reference to Print::println(Piduino::String const&)' /usr/bin/ld: sketch.cpp:(.text+0x7cc): undefined reference to Piduino::TerminalNotifier::~TerminalNotifier()'
/usr/bin/ld: sketch.cpp:(.text+0x7d4): undefined reference to Piduino::FileDevice::~FileDevice()' /usr/bin/ld: sketch.cpp:(.text+0x8fc): undefined reference to vtable for PiConsole'
/usr/bin/ld: .pio/build/raspberrypi_3b/src/sketch.o: in function TIntProperty::toString()': sketch.cpp:(.text._ZN12TIntProperty8toStringEv[_ZN12TIntProperty8toStringEv]+0x10): undefined reference to Piduino::String::toString(long, unsigned char)'
/usr/bin/ld: .pio/build/raspberrypi_3b/src/sketch.o: in function UdpInterfaceAppSettings_6436778422698_t::remoteAddress()': sketch.cpp:(.text._ZN39UdpInterfaceAppSettings_6436778422698_t13remoteAddressEv[_ZN39UdpInterfaceAppSettings_6436778422698_t13remoteAddressEv]+0x20): undefined reference to IPAddress::IPAddress(unsigned char, unsigned char, unsigned char, unsigned char)'
/usr/bin/ld: .pio/build/raspberrypi_3b/src/sketch.o: in function TIntProperty::setValueFromString(BaseApp*, Piduino::String)': sketch.cpp:(.text._ZN12TIntProperty18setValueFromStringEP7BaseAppN7Piduino6StringE[_ZN12TIntProperty18setValueFromStringEP7BaseAppN7Piduino6StringE]+0x30): undefined reference to Piduino::String::toInt() const'
/usr/bin/ld: sketch.cpp:(.text._ZN12TIntProperty18setValueFromStringEP7BaseAppN7Piduino6StringE[_ZN12TIntProperty18setValueFromStringEP7BaseAppN7Piduino6StringE]+0x11c): undefined reference to Print::print(__FlashStringHelper const*)' /usr/bin/ld: sketch.cpp:(.text._ZN12TIntProperty18setValueFromStringEP7BaseAppN7Piduino6StringE[_ZN12TIntProperty18setValueFromStringEP7BaseAppN7Piduino6StringE]+0x138): undefined reference to Print::println(Piduino::String const&)'
/usr/bin/ld: sketch.cpp:(.text._ZN12TIntProperty18setValueFromStringEP7BaseAppN7Piduino6StringE[_ZN12TIntProperty18setValueFromStringEP7BaseAppN7Piduino6StringE]+0x178): undefined reference to Print::print(__FlashStringHelper const*)' /usr/bin/ld: sketch.cpp:(.text._ZN12TIntProperty18setValueFromStringEP7BaseAppN7Piduino6StringE[_ZN12TIntProperty18setValueFromStringEP7BaseAppN7Piduino6StringE]+0x194): undefined reference to Print::println(Piduino::String const&)'
/usr/bin/ld: .pio/build/raspberrypi_3b/src/sketch.o: in function _GLOBAL__sub_I_sketch.cpp': sketch.cpp:(.text.startup+0x48): undefined reference to PiConsole::PiConsole()'
/usr/bin/ld: sketch.cpp:(.text.startup+0x12c): undefined reference to IPAddress::IPAddress(unsigned char, unsigned char, unsigned char, unsigned char)' /usr/bin/ld: .pio/build/raspberrypi_3b/src/sketch.o: in function main':
sketch.cpp:(.text.startup+0x824): undefined reference to HardwareSerial::setupAvailablePorts()' /usr/bin/ld: sketch.cpp:(.text.startup+0x870): undefined reference to createPidFile'
/usr/bin/ld: sketch.cpp:(.text.startup+0x874): undefined reference to Piduino::SysLog::cerrToSyslog()' /usr/bin/ld: sketch.cpp:(.text.startup+0x878): undefined reference to Piduino::SysLog::coutToSyslog()'
/usr/bin/ld: .pio/build/raspberrypi_3b/src/sketch.o: in function PiConsole::~PiConsole()': sketch.cpp:(.text._ZN9PiConsoleD2Ev[_ZN9PiConsoleD5Ev]+0x20): undefined reference to Piduino::TerminalNotifier::~TerminalNotifier()'
/usr/bin/ld: sketch.cpp:(.text._ZN9PiConsoleD2Ev[_ZN9PiConsoleD5Ev]+0x28): undefined reference to Piduino::FileDevice::~FileDevice()' /usr/bin/ld: sketch.cpp:(.text._ZN9PiConsoleD2Ev[_ZN9PiConsoleD5Ev]+0x38): undefined reference to vtable for PiConsole'
/usr/bin/ld: .pio/build/raspberrypi_3b/src/sketch.o: in function PiConsole::~PiConsole()': sketch.cpp:(.text._ZN9PiConsoleD0Ev[_ZN9PiConsoleD5Ev]+0x20): undefined reference to Piduino::TerminalNotifier::~TerminalNotifier()'
/usr/bin/ld: sketch.cpp:(.text._ZN9PiConsoleD0Ev[_ZN9PiConsoleD5Ev]+0x28): undefined reference to Piduino::FileDevice::~FileDevice()' /usr/bin/ld: sketch.cpp:(.text._ZN9PiConsoleD0Ev[_ZN9PiConsoleD5Ev]+0x44): undefined reference to vtable for PiConsole'
/usr/bin/ld: .pio/build/raspberrypi_3b/src/Controller.o: in function Controller::setup()': Controller.cpp:(.text+0x70): undefined reference to Print::print(__FlashStringHelper const*)'
/usr/bin/ld: Controller.cpp:(.text+0x84): undefined reference to Piduino::String::toString(long, unsigned char)' /usr/bin/ld: Controller.cpp:(.text+0x90): undefined reference to Print::println(Piduino::String const&)'
/usr/bin/ld: Controller.cpp:(.text+0xbc): undefined reference to Print::print(__FlashStringHelper const*)' /usr/bin/ld: Controller.cpp:(.text+0xd0): undefined reference to Piduino::String::toString(long, unsigned char)'
/usr/bin/ld: Controller.cpp:(.text+0xdc): undefined reference to Print::println(Piduino::String const&)' /usr/bin/ld: Controller.cpp:(.text+0x160): undefined reference to Print::println(__FlashStringHelper const*)'
/usr/bin/ld: Controller.cpp:(.text+0x178): undefined reference to Print::print(__FlashStringHelper const*)' /usr/bin/ld: Controller.cpp:(.text+0x194): undefined reference to Print::println(__FlashStringHelper const*)'
/usr/bin/ld: Controller.cpp:(.text+0x1b0): undefined reference to Print::println(__FlashStringHelper const*)' /usr/bin/ld: Controller.cpp:(.text+0x1c0): undefined reference to Print::print(__FlashStringHelper const*)'
/usr/bin/ld: Controller.cpp:(.text+0x1e0): undefined reference to Print::println(int, int)' /usr/bin/ld: .pio/build/raspberrypi_3b/src/Controller.o: in function Controller::sendEvent(BaseApp*, TAppEvent*)':
Controller.cpp:(.text+0x31c): undefined reference to Print::print(__FlashStringHelper const*)' /usr/bin/ld: Controller.cpp:(.text+0x338): undefined reference to Print::println(Piduino::String const&)'
/usr/bin/ld: .pio/build/raspberrypi_3b/src/Controller.o: in function Controller::debugSerialPrintProperties()': Controller.cpp:(.text+0x8e4): undefined reference to Print::print(__FlashStringHelper const*)'
/usr/bin/ld: Controller.cpp:(.text+0x8f0): undefined reference to Print::print(__FlashStringHelper const*)' /usr/bin/ld: Controller.cpp:(.text+0x8fc): undefined reference to Print::print(__FlashStringHelper const*)'
/usr/bin/ld: Controller.cpp:(.text+0x920): undefined reference to Print::println(Piduino::String const&)' /usr/bin/ld: .pio/build/raspberrypi_3b/src/Controller.o: in function TAppEvent::getName()':
Controller.cpp:(.text._ZN9TAppEvent7getNameEv[_ZN9TAppEvent7getNameEv]+0xb8): undefined reference to Piduino::String::toString(unsigned long, unsigned char)' /usr/bin/ld: .pio/build/raspberrypi_3b/src/Controller.o: in function _GLOBAL__sub_I_Controller.cpp':
Controller.cpp:(.text.startup+0x50): undefined reference to IPAddress::IPAddress(unsigned char, unsigned char, unsigned char, unsigned char)' /usr/bin/ld: .pio/build/raspberrypi_3b/src/app/base_app.o: in function BaseApp::setIntPropertyValue(Piduino::String const&, int)':
base_app.cpp:(.text+0x24c): undefined reference to Print::print(__FlashStringHelper const*)' /usr/bin/ld: base_app.cpp:(.text+0x268): undefined reference to Print::println(Piduino::String const&)'
/usr/bin/ld: base_app.cpp:(.text+0x2a8): undefined reference to Print::print(__FlashStringHelper const*)' /usr/bin/ld: base_app.cpp:(.text+0x2c4): undefined reference to Print::println(Piduino::String const&)'
/usr/bin/ld: .pio/build/raspberrypi_3b/src/app/base_app.o: in function BaseApp::setIntPropertyValue(__FlashStringHelper const*, int)': base_app.cpp:(.text+0x418): undefined reference to Print::print(__FlashStringHelper const*)'
/usr/bin/ld: base_app.cpp:(.text+0x434): undefined reference to Print::println(Piduino::String const&)' /usr/bin/ld: base_app.cpp:(.text+0x474): undefined reference to Print::print(__FlashStringHelper const*)'
/usr/bin/ld: base_app.cpp:(.text+0x490): undefined reference to Print::println(Piduino::String const&)' /usr/bin/ld: .pio/build/raspberrypi_3b/src/app/base_app.o: in function BaseApp::setFloatPropertyValue(Piduino::String const&, float)':
base_app.cpp:(.text+0x5f0): undefined reference to Print::print(__FlashStringHelper const*)' /usr/bin/ld: base_app.cpp:(.text+0x60c): undefined reference to Print::println(Piduino::String const&)'
/usr/bin/ld: base_app.cpp:(.text+0x64c): undefined reference to Print::print(__FlashStringHelper const*)' /usr/bin/ld: base_app.cpp:(.text+0x668): undefined reference to Print::println(Piduino::String const&)'
/usr/bin/ld: .pio/build/raspberrypi_3b/src/app/base_app.o: in function BaseApp::setFloatPropertyValue(__FlashStringHelper const*, float)': base_app.cpp:(.text+0x7c8): undefined reference to Print::print(__FlashStringHelper const*)'
/usr/bin/ld: base_app.cpp:(.text+0x7e4): undefined reference to Print::println(Piduino::String const&)' /usr/bin/ld: base_app.cpp:(.text+0x824): undefined reference to Print::print(__FlashStringHelper const*)'
/usr/bin/ld: base_app.cpp:(.text+0x840): undefined reference to Print::println(Piduino::String const&)' /usr/bin/ld: .pio/build/raspberrypi_3b/src/app/base_app.o: in function _GLOBAL__sub_I_base_app.cpp':
base_app.cpp:(.text.startup+0x50): undefined reference to IPAddress::IPAddress(unsigned char, unsigned char, unsigned char, unsigned char)' /usr/bin/ld: .pio/build/raspberrypi_3b/src/app/bathroom_fan.o: in function BathroomFan::applyStatus(unsigned char)':
bathroom_fan.cpp:(.text+0x224): undefined reference to Print::print(__FlashStringHelper const*)' /usr/bin/ld: bathroom_fan.cpp:(.text+0x240): undefined reference to Print::println(Piduino::String const&)'
/usr/bin/ld: bathroom_fan.cpp:(.text+0x280): undefined reference to Print::print(__FlashStringHelper const*)' /usr/bin/ld: bathroom_fan.cpp:(.text+0x29c): undefined reference to Print::println(Piduino::String const&)'
/usr/bin/ld: bathroom_fan.cpp:(.text+0x2dc): undefined reference to Print::print(__FlashStringHelper const*)' /usr/bin/ld: bathroom_fan.cpp:(.text+0x2f8): undefined reference to Print::println(Piduino::String const&)'
/usr/bin/ld: bathroom_fan.cpp:(.text+0x338): undefined reference to Print::print(__FlashStringHelper const*)' /usr/bin/ld: bathroom_fan.cpp:(.text+0x354): undefined reference to Print::println(Piduino::String const&)'
/usr/bin/ld: .pio/build/raspberrypi_3b/src/app/bathroom_fan.o: in function _GLOBAL__sub_I_bathroom_fan.cpp': bathroom_fan.cpp:(.text.startup+0x50): undefined reference to IPAddress::IPAddress(unsigned char, unsigned char, unsigned char, unsigned char)'
/usr/bin/ld: .pio/build/raspberrypi_3b/src/app/counter_app.o: in function CounterApp::start()': counter_app.cpp:(.text+0x10c): undefined reference to Print::print(__FlashStringHelper const*)'
/usr/bin/ld: counter_app.cpp:(.text+0x128): undefined reference to Print::println(Piduino::String const&)' /usr/bin/ld: counter_app.cpp:(.text+0x168): undefined reference to Print::print(__FlashStringHelper const*)'
/usr/bin/ld: counter_app.cpp:(.text+0x184): undefined reference to Print::println(Piduino::String const&)' /usr/bin/ld: .pio/build/raspberrypi_3b/src/app/counter_app.o: in function CounterApp::onEvent(BaseApp*, TAppEvent*)':
counter_app.cpp:(.text+0x464): undefined reference to Print::print(__FlashStringHelper const*)' /usr/bin/ld: counter_app.cpp:(.text+0x480): undefined reference to Print::println(Piduino::String const&)'
/usr/bin/ld: counter_app.cpp:(.text+0x4c0): undefined reference to Print::print(__FlashStringHelper const*)' /usr/bin/ld: counter_app.cpp:(.text+0x4dc): undefined reference to Print::println(Piduino::String const&)'
/usr/bin/ld: counter_app.cpp:(.text+0x51c): undefined reference to Print::print(__FlashStringHelper const*)' /usr/bin/ld: counter_app.cpp:(.text+0x538): undefined reference to Print::println(Piduino::String const&)'
/usr/bin/ld: counter_app.cpp:(.text+0x578): undefined reference to Print::print(__FlashStringHelper const*)' /usr/bin/ld: counter_app.cpp:(.text+0x594): undefined reference to Print::println(Piduino::String const&)'
/usr/bin/ld: .pio/build/raspberrypi_3b/src/app/counter_app.o: in function _GLOBAL__sub_I_counter_app.cpp': counter_app.cpp:(.text.startup+0x50): undefined reference to IPAddress::IPAddress(unsigned char, unsigned char, unsigned char, unsigned char)'
/usr/bin/ld: .pio/build/raspberrypi_3b/src/app/event_collector2_app.o: in function _GLOBAL__sub_I_event_collector2_app.cpp': event_collector2_app.cpp:(.text.startup+0x50): undefined reference to IPAddress::IPAddress(unsigned char, unsigned char, unsigned char, unsigned char)'
/usr/bin/ld: .pio/build/raspberrypi_3b/src/app/event_trigger_app.o: in function _GLOBAL__sub_I_event_trigger_app.cpp': event_trigger_app.cpp:(.text.startup+0x50): undefined reference to IPAddress::IPAddress(unsigned char, unsigned char, unsigned char, unsigned char)'
/usr/bin/ld: .pio/build/raspberrypi_3b/src/app/simple_light_app.o: in function SimpleLightApp::init(TAppSettings*)': simple_light_app.cpp:(.text+0x558): undefined reference to Print::print(__FlashStringHelper const*)'
/usr/bin/ld: simple_light_app.cpp:(.text+0x574): undefined reference to Print::println(Piduino::String const&)' /usr/bin/ld: simple_light_app.cpp:(.text+0x638): undefined reference to Print::print(__FlashStringHelper const*)'
/usr/bin/ld: simple_light_app.cpp:(.text+0x654): undefined reference to Print::println(Piduino::String const&)' /usr/bin/ld: .pio/build/raspberrypi_3b/src/app/simple_light_app.o: in function TIntProperty::setValue(BaseApp*, int)':
simple_light_app.cpp:(.text._ZN12TIntProperty8setValueEP7BaseAppi[_ZN12TIntProperty8setValueEP7BaseAppi]+0xf4): undefined reference to Print::print(__FlashStringHelper const*)' /usr/bin/ld: simple_light_app.cpp:(.text._ZN12TIntProperty8setValueEP7BaseAppi[_ZN12TIntProperty8setValueEP7BaseAppi]+0x110): undefined reference to Print::println(Piduino::String const&)'
/usr/bin/ld: simple_light_app.cpp:(.text._ZN12TIntProperty8setValueEP7BaseAppi[_ZN12TIntProperty8setValueEP7BaseAppi]+0x150): undefined reference to Print::print(__FlashStringHelper const*)' /usr/bin/ld: simple_light_app.cpp:(.text._ZN12TIntProperty8setValueEP7BaseAppi[_ZN12TIntProperty8setValueEP7BaseAppi]+0x16c): undefined reference to Print::println(Piduino::String const&)'
/usr/bin/ld: .pio/build/raspberrypi_3b/src/app/simple_light_app.o: in function _GLOBAL__sub_I_simple_light_app.cpp': simple_light_app.cpp:(.text.startup+0x50): undefined reference to IPAddress::IPAddress(unsigned char, unsigned char, unsigned char, unsigned char)'
/usr/bin/ld: .pio/build/raspberrypi_3b/src/app/timer_app.o: in function _GLOBAL__sub_I_timer_app.cpp': timer_app.cpp:(.text.startup+0x50): undefined reference to IPAddress::IPAddress(unsigned char, unsigned char, unsigned char, unsigned char)'
/usr/bin/ld: .pio/build/raspberrypi_3b/src/app/udp_interface_app.o: in function _GLOBAL__sub_I_udp_interface_app.cpp': udp_interface_app.cpp:(.text.startup+0x50): undefined reference to IPAddress::IPAddress(unsigned char, unsigned char, unsigned char, unsigned char)'
/usr/bin/ld: .pio/build/raspberrypi_3b/src/app/udp_interface_app.o:(.data.rel.ro+0x18): undefined reference to typeinfo for Print' /usr/bin/ld: .pio/build/raspberrypi_3b/src/app/udp_interface_app.o:(.data.rel.ro+0x7c): undefined reference to Print::writeln()'
/usr/bin/ld: .pio/build/raspberrypi_3b/src/app/udp_interface_app.o:(.data.rel.ro+0x84): undefined reference to Print::write(unsigned char const*, unsigned int)' /usr/bin/ld: .pio/build/raspberrypi_3b/src/app/udp_interface_app.o:(.data.rel.ro+0x8c): undefined reference to Print::println()'
/usr/bin/ld: .pio/build/raspberrypi_3b/src/libs/BtnLibrary.o: in function _GLOBAL__sub_I_BtnLibrary.cpp': BtnLibrary.cpp:(.text.startup+0x50): undefined reference to IPAddress::IPAddress(unsigned char, unsigned char, unsigned char, unsigned char)'
/usr/bin/ld: .pio/build/raspberrypi_3b/src/libs/UdpLinux.o: in function UdpLinux::beginPacket(char const*, unsigned short)': UdpLinux.cpp:(.text+0x100): undefined reference to IPAddress::IPAddress()'
/usr/bin/ld: UdpLinux.cpp:(.text+0x10c): undefined reference to IPAddress::fromString(char const*)' /usr/bin/ld: .pio/build/raspberrypi_3b/src/libs/UdpLinux.o: in function UdpLinux::remoteIP()':
UdpLinux.cpp:(.text+0x2dc): undefined reference to IPAddress::IPAddress()' /usr/bin/ld: .pio/build/raspberrypi_3b/src/libs/UdpLinux.o: in function _GLOBAL__sub_I_UdpLinux.cpp':
UdpLinux.cpp:(.text.startup+0x50): undefined reference to IPAddress::IPAddress(unsigned char, unsigned char, unsigned char, unsigned char)' /usr/bin/ld: .pio/build/raspberrypi_3b/src/libs/commands.o: in function BaseCommandApp::onReportPropertyTrigger()':
commands.cpp:(.text+0xb6c): undefined reference to Piduino::String::toString(unsigned long, unsigned char)' /usr/bin/ld: commands.cpp:(.text+0xccc): undefined reference to Piduino::String::toString(unsigned long, unsigned char)'
/usr/bin/ld: commands.cpp:(.text+0xd3c): undefined reference to Piduino::String::toString(unsigned long, unsigned char)' /usr/bin/ld: .pio/build/raspberrypi_3b/src/libs/commands.o: in function BaseCommandApp::writeEvent(TAppEvent*)':
commands.cpp:(.text+0xedc): undefined reference to Piduino::String::toString(unsigned long, unsigned char)' /usr/bin/ld: .pio/build/raspberrypi_3b/src/libs/commands.o: in function BaseCommandApp::executeCommand(char const*, int)':
commands.cpp:(.text+0x1108): undefined reference to Piduino::String::toInt() const' /usr/bin/ld: commands.cpp:(.text+0x17a0): undefined reference to Piduino::String::toString(unsigned long, unsigned char)'
/usr/bin/ld: commands.cpp:(.text+0x1984): undefined reference to Piduino::String::toInt() const' /usr/bin/ld: commands.cpp:(.text+0x1ac4): undefined reference to Piduino::String::toInt() const'
/usr/bin/ld: commands.cpp:(.text+0x1c00): undefined reference to Piduino::String::toInt() const' /usr/bin/ld: commands.cpp:(.text+0x1c80): undefined reference to Piduino::String::toInt() const'
/usr/bin/ld: .pio/build/raspberrypi_3b/src/libs/commands.o: in function BaseCommandApp::sendMapping()': commands.cpp:(.text+0x2104): undefined reference to Piduino::String::toString(unsigned long, unsigned char)'
/usr/bin/ld: commands.cpp:(.text+0x2228): undefined reference to Piduino::String::toString(unsigned long, unsigned char)' /usr/bin/ld: commands.cpp:(.text+0x23c0): undefined reference to Piduino::String::toString(unsigned long, unsigned char)'
/usr/bin/ld: commands.cpp:(.text+0x2430): undefined reference to Piduino::String::toString(unsigned long, unsigned char)' /usr/bin/ld: .pio/build/raspberrypi_3b/src/libs/commands.o: in function _GLOBAL__sub_I_commands.cpp':
commands.cpp:(.text.startup+0x50): undefined reference to IPAddress::IPAddress(unsigned char, unsigned char, unsigned char, unsigned char)' /usr/bin/ld: .pio/build/raspberrypi_3b/src/libs/fast_adc.o: in function _GLOBAL__sub_I_fast_adc.cpp':
fast_adc.cpp:(.text.startup+0x50): undefined reference to IPAddress::IPAddress(unsigned char, unsigned char, unsigned char, unsigned char)' /usr/bin/ld: .pio/build/raspberrypi_3b/src/libs/fast_gpio.o: in function _GLOBAL__sub_I_fast_gpio.cpp':
fast_gpio.cpp:(.text.startup+0x50): undefined reference to IPAddress::IPAddress(unsigned char, unsigned char, unsigned char, unsigned char)' /usr/bin/ld: .pio/build/raspberrypi_3b/src/libs/functions.o: in function _GLOBAL__sub_I_functions.cpp':
functions.cpp:(.text.startup+0x50): undefined reference to IPAddress::IPAddress(unsigned char, unsigned char, unsigned char, unsigned char)' /usr/bin/ld: .pio/build/raspberrypi_3b/src/libs/modbus_crc16.o: in function _GLOBAL__sub_I_modbus_crc16.cpp':
modbus_crc16.cpp:(.text.startup+0x50): undefined reference to `IPAddress::IPAddress(unsigned char, unsigned char, unsigned char, unsigned char)'
collect2: error: ld returned 1 exit status
*** [.pio/build/raspberrypi_3b/program] Error 1

Any hint on how to fix this? Can the library be included into platformio registry? Will be easier to work with it.

Thank you,
Flavio

SOVERSION is too long

The version of the shared library is in the M.m-B format (e.g., 0.3-48) which makes it necessary to recompile all piduino-dependent programs with each update. It should be limited to the major number.

Raspberry pi Zero 2 W support

I'm busy with trying piduino for the Raspberry Pi Zero 2 W.

From what I read, it is almost the same as Raspberry 3A.
So I'm trying to get it working.

I have already updated the database to the following:

board:
55|RaspberryPi Zero 2 Wifi (902120)|512|1.0|25|3|1|1|0|0
board_model:
25|RaspberryPi Zero 2 Wifi|0|2
revision:
55|9445664

Now busy with checking if this works. So will update when I find incompatibilities.

map function not working

I included <Piduino.h> but map is not working. here is the error.

picar.c: In function ‘void loop()’:
picar.c:87:32: error: ‘map’ was not declared in this scope
sp = map(temp, 0, 100, 0, 255);
^
picar.c:87:32: note: suggested alternative:
In file included from /usr/include/c++/6/map:61:0,
from /usr/include/piduino/gpio.h:23,
from /usr/include/piduino/arduino/Arduino.h:83,
from /usr/include/piduino/arduino/Piduino.h:20,
from picar.c:1:
/usr/include/c++/6/bits/stl_map.h:96:11: note: ‘std::map’
class map
^~~

Raspberry pi CM4 support

I'm busy with trying piduino for the Raspberry Pi CM4.

From what I read, it is almost the same as Raspberry 4b.
So I'm trying to get it working.

I have already updated the database to the following:

board:
54|RaspberryPi Compute Module 4 (0xb03140)|2048|1.0|24|3|1|1|0|0
board_family:
24|RaspberryPi Compute Module 4|0|5
revision:
54|11546944

Now busy with checking if this works. So will update when I find incompatibilities.

Conflict between binary.h and termio.h

The constants defined in /usr/include/piduino/arduino/binary.h enter into confilt with those defining the baudrates in /usr/include/aarch64-linux-gnu/bits/termios.h:

$ gcc -o PiZiGate_test main.c $(pkg-config --cflags --libs piduino)
In file included from /usr/include/piduino/arduino/Arduino.h:224,
from main.c:11:
/usr/include/piduino/arduino/binary.h:23: warning: "B0" redefined
#define B0 0

In file included from /usr/include/termios.h:39,
from main.c:8:
/usr/include/aarch64-linux-gnu/bits/termios.h:121: note: this is the location of the previous definition
#define B0 0000000 /* hang up */

In file included from /usr/include/piduino/arduino/Arduino.h:224,
from main.c:11:
/usr/include/piduino/arduino/binary.h:65: warning: "B110" redefined
#define B110 6

In file included from /usr/include/termios.h:39,
from main.c:8:
/usr/include/aarch64-linux-gnu/bits/termios.h:124: note: this is the location of the previous definition
#define B110 0000003

In file included from /usr/include/piduino/arduino/Arduino.h:224,
from main.c:11:
/usr/include/piduino/arduino/binary.h:277: warning: "B1000000" redefined
#define B1000000 64

In file included from /usr/include/termios.h:39,
from main.c:8:
/usr/include/aarch64-linux-gnu/bits/termios.h:162: note: this is the location of the previous definition
#define B1000000 0010010

bluetooth serial port access on raspberry pi 3b

Hi, I created a sample bluetooth controlled led using piduino library. Below is the code is executed. How can I include rfcomm in the below code ? I am able to run the code, but not able to control the LED using android via bluetooth.

#include <Piduino.h>

int led = 21;
int data = 0;

void setup()

{

pinMode(led, OUTPUT);
Serial.begin(9600);

}

void loop()
{

data = Serial.read();
if(data == '1')
{
digitalWrite(led, HIGH);
}

if(data == '0')
{
digitalWrite(led, LOW);
}

}

first SPI transfer does nothing

After opening the SPI bus, the first transfer made does nothing. It appears that the vector SpiDev::Private::tstack is not empty and contains 36 messages!

Using Console in a GPIO interrupt service routine

Using the Console object in an interrupt routine causes an exception when the program stops :
^C
everything was closed.
Have a nice day !
pure virtual method called
terminate called without an active exception
Abandon

missing header files in Arduino.h

The files HardwareSerial.h and binary.h are not included in the file Arduino.h while they are in the corresponding file on Arduino platform.

IDE

Can I program the Pi using the arduino IDE ? I mean I want to connect my pi to arduino IDE and program it. Is it possible ??

terminate called after throwing an instance of 'std::invalid_argument'

epsilonrt@nanopineo:~$ pinfo
terminate called after throwing an instance of 'std::invalid_argument'
  what():  Bad format for line: 13
Abandon
epsilonrt@nanopineo:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 11 (bullseye)
Release:        11
Codename:       bullseye

std system error

When executing pido or pinfo I get the following error:

terminate called after throwing an instance of 'std::system_error' what(): It seems that this system is not supported !: Operation not supported Aborted

By going through the other threads, I've learnt that this is caused by a board version which isn't supported. For this reason I followed the suggestion already given to other contributors: I uncommented the line "#revision=0xa02082", but I still get the same output as before, no change whatsoever.

The following is the output of the command cat /proc/cpuinfo:

processor : 0
model name : ARMv7 Processor rev 3 (v7l)
BogoMIPS : 108.00
Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part : 0xd08
CPU revision : 3

processor : 1
model name : ARMv7 Processor rev 3 (v7l)
BogoMIPS : 108.00
Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part : 0xd08
CPU revision : 3

processor : 2
model name : ARMv7 Processor rev 3 (v7l)
BogoMIPS : 108.00
Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part : 0xd08
CPU revision : 3

processor : 3
model name : ARMv7 Processor rev 3 (v7l)
BogoMIPS : 108.00
Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part : 0xd08
CPU revision : 3

Hardware : BCM2711
Revision : b03114
Serial : 1000000017ce3d70
Model : Raspberry Pi 4 Model B Rev 1.4`

std system error

When executing pido or pinfo I get the following error

terminate called after throwing an instance of 'std::system_error'
what(): It seems that this system is not supported !: Operation not supported
Aborted

Raspberry Pi OS bullseye build

The Raspbian section of the main page says

The Raspbian repository provides Piduino packages for armhf architecture for Stretch and Buster only.

This means that piduino can't work on Raspberry Pi OS bullseye? I've tried installing the debian bullseye package, raspbian buster package and building from source. The result is always the same: a successful installation, pido returns
pido: Command expected ! pido -h or man pido for help.
pinfo returns
Name : RaspberryPi 2B Family : RaspberryPi Database Id : 21 Manufacturer : Embest Board Revision : 0xa21041 SoC : Bcm2709 (Broadcom) Memory : 1024MB GPIO Id : 3 PCB Revision : 1.1 I2C Buses : /dev/i2c-2
but pido readall, sudo pido readall and pido readall 1 returns
pido: invalid argument (Unable to read pull resistor) !

Is there a way to use piduino and its packages on Raspberry Pi OS bullseye? If so, how?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.