pdf-icon

Arduino Quick Start

2. Devices & Examples

StamPLC CAN Bus Communication

StamPLC CAN bus communication related APIs and example program.

Example Program

cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
/*
 * SPDX-FileCopyrightText: 2025 M5Stack Technology CO LTD
 *
 * SPDX-License-Identifier: MIT
 */
#include <Arduino.h>
#include <M5StamPLC.h>

void setup()
{
    /* Enable CAN */
    auto config        = M5StamPLC.config();
    config.enableCan   = true;
    config.canBaudRate = 1000000;
    M5StamPLC.config(config);

    /* Init M5StamPLC */
    M5StamPLC.begin();
}

void loop()
{
    static uint32_t sending_time_count = 0;

    /* Send message */
    if (millis() - sending_time_count > 1000) {
        twai_message_t message;
        message.identifier       = 0xAAAA;
        message.extd             = 1;
        message.data_length_code = 8;
        for (int i = 0; i < message.data_length_code; i++) {
            message.data[i] = i;
        }

        if (twai_transmit(&message, pdMS_TO_TICKS(1000)) == ESP_OK) {
            printf(">> Message queued for transmission\n");
        } else {
            printf("Failed to queue message for transmission\n");
        }

        sending_time_count = millis();
    }

    /* Receive message */
    twai_message_t message;
    if (twai_receive(&message, pdMS_TO_TICKS(500)) == ESP_OK) {
        printf("<< Message received\n");

        if (message.extd) {
            printf("Message is in Extended Format\n");
        } else {
            printf("Message is in Standard Format\n");
        }

        printf("ID is %d\n", message.identifier);

        if (!(message.rtr)) {
            printf("Data: ");
            for (int i = 0; i < message.data_length_code; i++) {
                printf("%d ", message.data[i]);
            }
            printf("\n");
        }
    }
}
On This Page