zephyr/samples/net/paho_mqtt_clients/publisher
Anas Nashif d622b09bc0 samples: tests: remove obsolete KERNEL_TYPE and kernel variables
Remove those from Makefiles and testcase.ini, we now support unified kernel
only and sanitycheck script now knows how to deal with this.

Change-Id: I853ebcadfa7b56a4de5737d95f2ba096babb2e13
Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2016-11-04 15:47:25 -04:00
..
src samples/net: Remove call to unref routine when net_send returns >= 0 2016-08-18 16:08:11 +00:00
KNOWN_ISSUES mqtt: Add KNOWN_ISSUES file 2016-08-18 23:56:05 -05:00
Kbuild samples/net: MQTT publisher with QoS 2016-07-28 15:37:11 +00:00
Makefile samples: tests: remove obsolete KERNEL_TYPE and kernel variables 2016-11-04 15:47:25 -04:00
README samples/net: Update README file w.r.t compiler warnings 2016-08-11 17:43:16 +00:00
prj_galileo.conf samples/net: Add network-related functions to MQTT Publisher 2016-08-01 18:28:38 +00:00

README

MQTT sample using the Paho's MQTT Packet Library.


Requirements
------------

* Ethernet LAN for testing purposes.

* MQTT 3.1.1 Gateway.

  NOTE for Debian/Ubuntu users: it seems that the mosquitto server
       included with these distros does not support MQTT 3.1.1.
       Uninstall the mosquitto server and follow the instructions
       provided at the mosquitto website:

                    http://mosquitto.org/download/

       to update the application.

* Galileo Gen 2 Development Board.

* USB-UART cable: CH340, FTDI 6-pin or equivalent for debugging.

The Mosquitto MQTT implementation is used in this document. However,
any MQTT 3.1.1 compliant gateway must work. See http://mosquitto.org/
for more details.


Building instructions
---------------------

* Download the Paho's MQTT Embedded C Library.
  See http://www.eclipse.org/paho/clients/c/embedded/ for more
  information about Paho's MQTT Packet Library.

  Inside samples/net/paho_mqtt_clients/publisher, run the following
  commands:

  git clone https://git.eclipse.org/r/paho/org.eclipse.paho.mqtt.embedded-c paho

  Now "paho" contains the MQTT Packet Library.

* Read src/main.c, change the IP addresses according to the LAN
  environment.

* make pristine && make are enough to build this sample.

* Follow the steps indicated here:

  https://www.zephyrproject.org/doc/board/galileo.html

  to load the binary into the Galileo Dev Board.


Usage
-----

* From a terminal, run the gateway:

  mosquitto -v

* A subscriber is required to receive the messages sent by this
  publisher. For example, the following command must be executed from a
  terminal to create a MQTT subscriber:

    mosquitto_sub -t sensors

  If this command is executed from a computer other than the gateway,
  the host must be specified.

* Connect the USB-UART cable to the Galileo. Open a terminal and run:

  screen /dev/ttyUSB0 115200

* Connect Galileo to the LAN, Turn on the board.

  Once Galileo is connected to the MQTT Gateway, the following text
  will appear in the screen terminal:

    WARNING: no console will be available to OS
    error: no suitable video mode found.

    --------------------------------
    Pingreg, rc: 0
    Publish QoS0, rc: OK
    Publish QoS1, rc: OK
    Publish QoS2, rc: OK


  The subscriber application will receive the following messages:

    OK QoS0
    OK QoS1
    OK QoS2

  The mosquitto application will show something like this:

    1469221705: mosquitto version 1.4.9 (build date 2016-07-01 15:07:21+0000) starting
    1469221705: Using default config.
    1469221705: Opening ipv4 listen socket on port 1883.
    1469221705: Opening ipv6 listen socket on port 1883.
    1469221712: New connection from 192.168.1.110 on port 1883.
    1469221712: New client connected from 192.168.1.110 as zephyr (c1, k0).
    1469221712: Sending CONNACK to zephyr (0, 0)
    1469221712: Received PINGREQ from zephyr
    1469221712: Sending PINGRESP to zephyr
    1469221712: Received PUBLISH from zephyr (d0, q0, r0, m0, 'sensors', ... (8 bytes))
    1469221712: Received PUBLISH from zephyr (d0, q1, r0, m1, 'sensors', ... (8 bytes))
    1469221712: Sending PUBACK to zephyr (Mid: 1)
    1469221713: Received PUBLISH from zephyr (d0, q2, r0, m2, 'sensors', ... (8 bytes))
    1469221713: Sending PUBREC to zephyr (Mid: 2)
    1469221713: Received PUBREL from zephyr (Mid: 2)
    1469221713: Sending PUBCOMP to zephyr (Mid: 2)


Final Remarks
-------------

The provided source code perhaps does not exemplify the best way to use
Paho's MQTT in Zephyr. For example, PINGREQ must be sent periodically,
but not too often as in this use-case. Furthermore, DISCONNECT is never
used here.


Compiler Warnings
-----------------

The network layer used in this sample code will be replaced once the
new IP stack is ready. So, "netz" is tagged as "deprecated" and the
following warnings will be displayed by the compiler:

warning: 'netz_tx' is deprecated [-Wdeprecated-declarations]