3rd party library compatibility


#1

I thought that we should keep a place where library compatibility and desired libraries is documented.


#2

I would like to be able to use the blynk library. Haven’t tested to see what needs to be done to make it compatible


#3

Testing Arduino sketch that utilizes the following libraries with Dallas Temperature sensors
#include <OneWire.h>
#include <DallasTemperature.h>

The sketch compiles and uploads but stops running at the command to start library
// Start up the library
sensors.begin();

Are there any known compatibility issues with these or other libraries?


#4

Sorry…Looks like the libraries did not display in my last post
OneWire.h
DallasTemperature.h


#5

Hey @tonym63 (and @rubenk),

Just letting you know that we are keeping a watch on this thread as the primary thread for listing library compatibility concerns/requests.

Thanks,
PFW


#6

Hi, All,

Just a +1 wish here for library compatibility – Dallas Temp, One Wire, and I2C libraries (for LCD displays) are great Arduino tools in my world.

Thanks!


#7

Here’s another one to ponder: float to String conversion; normally possible using the ever-popular dtostrf function (which I believe uses the stdlib.h library) . It works under Arduino IDE 1.6.7 for legacy Arduino boards, but it looks like the function is disabled for the Dash. I’m limping along for now using integers instead of floats… :slight_smile:


#8

I think most of this stuff might be fixed in the latest Arduino integration out today. (0.7.1) You should get a prompt to upgrade when you start up the IDE.


#9

Does this include I2C?


#10

@torchris

Yes! I2C Master mode is now available. Use the Wire object and pins L03 (SDA) and L04 (SCL). There is no library to include, Wire is bundled with the core.


#11

@MichaelM

You should be able to use dtostrf() now just like you do on other Arduino boards. Serial.print(float) should also work for you.


#12

Perfect! I’ll give that a try too. Do you think it would work with the U8Glib OLED library? - https://github.com/olikraus/u8glib.

Many thanks for getting this done so fast! :smile:


#13

@torchris

That is quite a library. Unfortunately it doesn’t use the Arduino Wire class, it uses bit-bang I2C using device-specific registers. There is code in the library for the Arduino Due, which is an ARM processor, but the IO registers are different in the Dash processor (Freescale MK22FN1M0).

It should be possible to wrap the functions provided by the Wire class in C functions that could be called from a modified U8Glib library. It looks like these are the only functions needed:

void u8g_i2c_init(uint8_t options);
uint8_t u8g_i2c_start(uint8_t sla);
uint8_t u8g_i2c_send_byte(uint8_t data);
void u8g_i2c_stop(void);

So a C wrapper for Wire could be something like:

#ifdef __cplusplus
 extern "C" {
#endif

void wirec_init(uint8_t options);
void wirec_start(uint8_t sla);
void wirec_send_byte(uint8_t data);
void wirec_stop(void);

#ifdef __cplusplus
}
#endif

void wirec_init(uint8_t options) {
  Wire.begin();
}

void wirec_start(uint8_t sla) {
  Wire.beginTransmission(sla);
}

void wirec_send_byte(uint8_t data) {
  Wire.write(data);
}

void wirec_stop(void) {
  Wire.endTransmission();
}

Then in u8g_com_i2c.c you’d need to call the wrapper functions in your own #define block,

 #elif defined(ARDUINO_ARCH_KONEKTDASH)
void u8g_i2c_init(uint8_t options) { wirec_init(options); }
uint8_t u8g_i2c_start(uint8_t sla) { wirec_start(sla); }
uint8_t u8g_i2c_send_byte(uint8_t data) { wirec_send_byte(data); }
void u8g_i2c_stop(void) { wirec_stop(); }

There are probably some other #defines you’d have to set. I’d look for __SAM3X8E__ and check for ARDUINO_ARCH_KONEKTDASH also.

If you try adding this let us know how it’s going and if we can help get it working.


#14

Excellent - thanks for taking such a careful look at this. I will try this out a bit later after I’ve tested a few other I2C items.

I tested quite a few OLED libraries to go with these kinds of displays you see on eBay all the time (www.ebay.ca/sch/i.html?_from=R40&_trksid=p2050601.m570.l1313.TR12.TRC2.A0.H0.Xi2c+OLED.TRS0&_nkw=i2c+OLED&_sacat=0). Generally, I find U8Glib to be the easiest library to use and these displays are a neater solution than the old LCD serial unit.


#15

Just tested a i2c BMP180 temp/pressure sensor using the Adafruit library and it works like a charm! Well done!!

Thanks!


#16

I’ve had some recent success in getting the Dallas temp sensor (18B20) to work with my Dash. More testing required, but progress for sure. Both the OneWire.h and DallasTemperature.h libraries now appear to compile and function.


#17

MichaelM, can I trouble you to share your sketch?


#18

Delighted to do so. :-). Out of town today; but I’ll have it for you this weekend.


#19

Just checked my records on the Dallas 18B20 sensors. The sketches I’ve had success with are the example ones included in the Arduino libraries: “Tester” and “One Wire Search” both run well, which indicates that other sketches will work also. If you add “OneWire,” “DallasTemperature,” and DHT_sensor-library" to your Arduino IDE environment (these are the three I use), you will have a good number of examples sketches to choose from under Arduino>File>Examples (this from my Mac install; Windows likely similar).


#20

Tried to compile the examples Single and DS18x20_Temperature in the OneWire and DallasTemperature libraries to use a DS18B20 sensor and I keep getting this error:

OneWire.h:108:2: error: #error “Please define I/O register types here”

#error “Please define I/O register types here”

Not sure what to do next?