Categories

A sample text widget

Etiam pulvinar consectetur dolor sed malesuada. Ut convallis euismod dolor nec pretium. Nunc ut tristique massa.

Nam sodales mi vitae dolor ullamcorper et vulputate enim accumsan. Morbi orci magna, tincidunt vitae molestie nec, molestie at mi. Nulla nulla lorem, suscipit in posuere in, interdum non magna.

A TinyXML library for the Arduino

A lot of devices use XML these days – and parsing the XML by hand is quite complex. I use a CurrentCost CC128 power monitor and also Twitter. Both of these have an XML interface.

Over the last couple of months I have been developing a simple XML parser as an Arduino library – it is table driven and so compact and easily modified. This is now ready for release – you can download it here. The CC-128 example compiles at less than 9kB.

I have included a Twitter API example and also a CurrentCost CC-128 example.

The CC-128 example is being used to provide a data concentrator for CC-128. I am using an Arduino (Mini Pro 328) to take the cpu burden off the main Arduino, processing serial data at 57600 baud takes up most of the power of an Arduino.

Connect the Mini Pro to the CC-128 using GND and CC-128 Tx to Mini Pro pin digital 1. The Mini Pro acts as an I2C slave for the main Arduino (simple connection – just link up GND, A4 and A5 – also 5V if you don’t have a separate power supply).

I have three current cost devices feeding the CC-128 – Electricity, Gas and a light sensor. It should be quite easy to modify the example for your configuration.

Master code to read from the CC128 I2C slave is roughly as follows

CC128Data cc128data; // structure definition is held in the .h file

Wire.beginTransmission(I2CADDR);
Wire.send(COMMAND);
Wire.send(SNAPSHOT | READALL);
Wire.endTransmission();
delay(5); // give the I2C transmission and the slave time to deal with request
// 2mS does not work - 3 does - give it 5 to be safe
Wire.requestFrom(I2CADDR, sizeof(CC128Data)); // request data structure bytes from slave device
byte* b = (byte*)&cc128data;
for (int i = 0; i<sizeof (CC128Data); i++)
{
*b++ = Wire.receive(); // receive a byte as character
}

I will be writing up another post about the CC-128 data concentrator and the main Arduino, describing how to set up multiple I2C slaves all linked to a central Arduino CPU.

Comments are closed.