MQTT on 54L15

Hi all,

Has anyone implemented an MQTT client on an 54L15 before? I have been searching the web and I have not seen a sample program or anyone talking about MQTT with 54L15 only. I would appreciate any sample programs, it doesn't need to be complicated, I just want to verify that we can indeed implement the callback functions and its functionalities on 54L15. Thanks.

  • Here is the code that I have attempted to create as a simple sample program, but I receive connect error: -12. 

    Here is my main.c:

    #include <zephyr/kernel.h>
    #include <zephyr/net/mqtt.h>
    #include <zephyr/net/socket.h>
    #include <stdio.h>
    
    #define MQTT_BROKER_HOSTNAME "192.168.3.153"
    #define MQTT_BROKER_PORT 1883
    #define MQTT_CLIENT_ID "nrf54l15_subscriber"
    #define MQTT_TOPIC_SUBSCRIBE "test/54L15"
    
    static struct mqtt_client client;
    static struct sockaddr_storage broker;
    
    /* MQTT event handler */
    void mqtt_evt_handler(struct mqtt_client *const client,
                         const struct mqtt_evt *evt)
    {
        switch (evt->type) {
        case MQTT_EVT_CONNACK:
            if (evt->result != 0) {
                printk("Connection failed: %d\n", evt->result);
                return;
            }
            
            printk("Connected to broker\n");
            
            /* Subscribe to topic */
            struct mqtt_topic subscribe_topic = {
                .topic.utf8 = MQTT_TOPIC_SUBSCRIBE,
                .topic.size = strlen(MQTT_TOPIC_SUBSCRIBE)
            };
            
            const struct mqtt_subscription_list sub_list = {
                .list = &subscribe_topic,
                .list_count = 1,
                .message_id = 1
            };
            
            mqtt_subscribe(client, &sub_list);
            break;
            
        case MQTT_EVT_PUBLISH:
            /* Handle incoming messages */
            printk("Received: %.*s\n",
                   evt->param.publish.message.payload.len,
                   evt->param.publish.message.payload.data);
            break;
            
        case MQTT_EVT_DISCONNECT:
            printk("Disconnected from broker\n");
            break;
    
        default: 
            break;
        }
        
    }
    
    void connect_to_broker(void)
    {
        int err;
        
        /* Initialize client */
        mqtt_client_init(&client);
        
        /* Set callback */
        client.evt_cb = mqtt_evt_handler;
        client.client_id.utf8 = MQTT_CLIENT_ID;
        client.client_id.size = strlen(MQTT_CLIENT_ID);
        
        /* Configure broker address */
        struct sockaddr_in *broker4 = (struct sockaddr_in *)&broker;
        broker4->sin_family = AF_INET;
        broker4->sin_port = htons(MQTT_BROKER_PORT);
        inet_pton(AF_INET, MQTT_BROKER_HOSTNAME, &broker4->sin_addr.s_addr);
        
        /* Configure transport */
        client.transport.type = MQTT_TRANSPORT_NON_SECURE;
        client.broker = (struct sockaddr *)&broker;
        
        printk("Client parameters: \n");
            printk("  Client ID: %s\n", client.client_id.utf8);
            printk("  Broker: %s:%d\n", MQTT_BROKER_HOSTNAME, MQTT_BROKER_PORT);
            printk("  Topic: %s\n", MQTT_TOPIC_SUBSCRIBE);
            printk("  Transport: %s\n", client.transport.type == MQTT_TRANSPORT_NON_SECURE ? "Non-secure" : "Secure");
            
    
    
        /* Connect to broker */
        err = mqtt_connect(&client);
        if (err != 0) {
            printk("Connect error: %d\n", err);
        }
    }
    
    int main(void)
    {
        printk("Starting MQTT subscriber\n");
        connect_to_broker();
        
        while (1) {
            k_sleep(K_SECONDS(1));
        }
    }

    Here is my prj.conf:

    CONFIG_NETWORKING=y
    CONFIG_MQTT_LIB=y
    CONFIG_MQTT_LIB_TLS=n
    CONFIG_NET_SOCKETS=y
    CONFIG_NET_SOCKETS_POSIX_NAMES=y
    CONFIG_NET_IPV6=y
    CONFIG_NET_TCP=y
    CONFIG_NET_UDP=y
    CONFIG_NET_DHCPV6=n
    CONFIG_NET_MGMT=y
    CONFIG_NET_MGMT_EVENT=y
    CONFIG_LOG=y
    
    
    CONFIG_SHELL=y
    CONFIG_OPENTHREAD_SHELL=y
    CONFIG_SHELL_ARGC_MAX=26
    CONFIG_SHELL_CMD_BUFF_SIZE=416
    CONFIG_OPENTHREAD_NORDIC_LIBRARY_MASTER=y
    CONFIG_NET_L2_OPENTHREAD=y
    CONFIG_SETTINGS_ZMS=y
    CONFIG_ZMS=y
    CONFIG_NVS=n
    CONFIG_FLASH=y
    CONFIG_FLASH_MAP=y
    CONFIG_SPI_NOR=n 
    
    
    CONFIG_MAIN_STACK_SIZE=6144
    CONFIG_SHELL_STACK_SIZE=5120

Related