aboutsummaryrefslogtreecommitdiffstats

Raspberry Pi Sense HAT support module for Qt 5

Tested on Raspbian Jessie 2015/09/24 and Qt 5.6 as described on https://wiki.qt.io/RaspberryPi2EGLFS

Sensor support is based on RTIMULib as shipped in Raspbian and https://github.com/RPi-Distro/python-sense-hat.

This a true Qt module. To build, do qmake -r && make && make install. To use, add QT += sensehat.

LED example:

int main(int argc, char **argv)
{
    QCoreApplication app(argc, argv);
    QSenseHatFb fb;
    fb.setLowLight(true);
    QPainter p(fb.paintDevice());
    p.fillRect(QRect(QPoint(), fb.size()), Qt::black);
    for (int i = Qt::white; i < Qt::darkYellow; ++i) {
        p.setPen(Qt::GlobalColor(i));
        p.drawEllipse(QPoint(4, 4), 3, 3);
        p.drawLine(QPoint(4, 4), QPoint(7, 7));
        sleep(1);
    }
    p.fillRect(QRect(QPoint(), fb.size()), Qt::black);
    return 0;
}

An alternative is to run with the linuxfb platform plugin and use QRasterWindow. However, QSenseHatFb is handy because it automatically finds the right device, supports device specifics (low-light mode), functions (to some extent) without initializing QtGui, and allows using any platform plugin and simultaneous HDMI output.

Sensors example:

int main(int argc, char **argv)
{
    QCoreApplication app(argc, argv);
    QSenseHatSensors sensors;
    sensors.setAutoPoll(true);
    QObject::connect(&sensors, &QSenseHatSensors::humidityChanged, [](qreal h) {
        qDebug() << "Humidity:" << h;
    });
    QObject::connect(&sensors, &QSenseHatSensors::pressureChanged, [](qreal p) {
        qDebug() << "Pressure:" << p;
    });
    QObject::connect(&sensors, &QSenseHatSensors::temperatureChanged, [](qreal c) {
        qDebug() << "Temperature:" << c;
    });
    QObject::connect(&sensors, &QSenseHatSensors::gyroChanged, [](const QVector3D &v) {
        qDebug() << "Gyro:" << v;
    });
    QObject::connect(&sensors, &QSenseHatSensors::accelerationChanged, [](const QVector3D &v) {
        qDebug() << "Acceleration:" << v;
    });
    QObject::connect(&sensors, &QSenseHatSensors::compassChanged, [](const QVector3D &v) {
        qDebug() << "Compass:" << v;
    });
    QObject::connect(&sensors, &QSenseHatSensors::orientationChanged, [](const QVector3D &v) {
        qDebug() << "Orientation:" << v;
    });
    QTimer::singleShot(10000, &app, &QCoreApplication::quit);
    return app.exec();
}

Raspbian's default calibration from /etc is picked up automatically, similarly to the Python lib. Orientation is converted to degrees in range 0..360. Other values are reported as-is.