高级
30 分钟

通过使用ESP-WROOM-02和PIC32MZ1024EFH064实现与Click Cloud的流畅可靠连接

Click Cloud的网关:让创意成形的地方!

Go to Cloud (G2C) Click with PIC32MZ clicker

已发布 6月 24, 2024

点击板

Go to Cloud (G2C) Click

开发板

PIC32MZ clicker

编译器

NECTO Studio

微控制器单元

PIC32MZ1024EFH064

通过我们的网关解决方案体验最优质的创新,安全连接到Click Cloud,这是将您的创意变为现实的理想平台。

A

A

硬件概览

它是如何工作的?

Go to Cloud (G2C) Click是一款Click板™,允许通过WiFi网络连接到功能丰富的Click Cloud平台。Go to Cloud (G2C) Click旨在让用户可以轻松添加云连接,并使用一组简单的AT命令开发自己的基于云的应用程序,而无需深入研究与网页、硬件和通信相关的复杂开发。由于这种简化的方法,任何人都可以使用Go to Cloud (G2C) Click和Click Cloud解决方案获益,因为该Click板™的固件中已经实现了所有必要的协议和通信设置。这节省了本来会浪费在固件开发上的大量时间,以及适应第三方解决方案的时间。更不用说,这样的努力还需要嵌入式和网页编程的熟练程度,以及其他多项工程技能。而G2C Click与Click Cloud解决方案紧密配

合,开箱即用。Go to Cloud (G2C) Click在其端执行若干任务,这些任务是连接到Click Cloud平台所必需的。要建立连接,需要访问具有Internet连接的WiFi网络。为了可靠的WiFi网络连接,Click板™采用了ESP WROOM-02 WiFi模块,这是一个成熟的集成WiFi解决方案。Click板™使用一个强大的MCU来管理连接参数,初始化ESP-WROOM-02 WiFi模块,并与Click Cloud平台建立连接。这使得通过发出一组简短的AT命令(例如SSID、密码、device_ID等)可以在几个简单步骤内设置连接。每个AT命令及其响应的详细解释可以在AT命令手册中找到。除了用于设置基本连接参数的AT命令外,还有AT命令允许存储连接参数,包括连

接密码、网络SSID、device_ID和其他相关连接数据。这些参数可以存储在Go to Cloud (G2C) Click的非易失性存储器中。可以通过一个宏命令恢复它们,从而简化连接过程。Go to Cloud (G2C) Click的功能将在未来不断改进。因此,Go to Cloud (G2C) Click支持通过板载USB连接器升级其固件。固件更新过程非常简单,使用MikroElektronika熟悉的“HID Bootloader”软件工具。Go to Cloud (G2C) Click配备了四个LED指示灯,用于指示电源、WiFi网络连接、USB连接和Click Cloud解决方案连接的状态。这些LED提供有关Go to Cloud (G2C) Click状态的视觉反馈。此Click板™需要3.3V和5V电源轨以正常运行。

Go to Cloud (G2C) Click hardware overview image

功能概述

开发板

PIC32MZ Clicker 是一款紧凑型入门开发板,它将 Click 板™的灵活性带给您喜爱的微控制器,使其成为实现您想法的完美入门套件。它配备了一款板载 32 位带有浮点单元的 Microchip PIC32MZ 微控制器,一个 USB 连接器,LED 指示灯,按钮,一个 mikroProg 连接器,以及一个用于与外部电子设备接口的头部。得益于其紧凑的设计和清晰易识别的丝网标记,它提供了流畅且沉浸式的工作体验,允许在任

何情况下、任何地方都能访问。PIC32MZ Clicker 开 发套件的每个部分都包含了使同一板块运行最高效的必要组件。除了可以选择 PIC32MZ Clicker 的编程方式,使用 USB HID mikroBootloader 或通过外部 mikroProg 连接器为 PIC,dsPIC 或 PIC32 编程外,Clicker 板还包括一个干净且调节过的开发套件电源供应模块。USB Micro-B 连接可以提供多达 500mA 的电流,这足以操作所有板载和附加模块。所有 

mikroBUS™ 本身支持的通信方法都在这块板上,包 括已经建立良好的 mikroBUS™ 插槽、重置按钮以及若干按钮和 LED 指示灯。PIC32MZ Clicker 是 Mikroe 生态系统的一个组成部分,允许您在几分钟内创建新的应用程序。它由 Mikroe 软件工具原生支持,得益于大量不同的 Click 板™(超过一千块板),其数量每天都在增长,它涵盖了原型制作的许多方面。

PIC32MZ clicker double side image

微控制器概述 

MCU卡片 / MCU

default

建筑

PIC32

MCU 内存 (KB)

1024

硅供应商

Microchip

引脚数

64

RAM (字节)

524288

使用的MCU引脚

mikroBUS™映射器

General-Purpose I/O
RE4
AN
Reset
RE5
RST
UART CTS
RG9
CS
NC
NC
SCK
NC
NC
MISO
NC
NC
MOSI
Power Supply
3.3V
3.3V
Ground
GND
GND
General-Purpose I/O
RB3
PWM
UART RTS
RB5
INT
UART TX
RB2
TX
UART RX
RB0
RX
NC
NC
SCL
NC
NC
SDA
Power Supply
5V
5V
Ground
GND
GND
1

“仔细看看!”

Click board™ 原理图

Go to Cloud (G2C) Click Schematic schematic

一步一步来

项目组装

PIC32MZ clicker front image hardware assembly

从选择您的开发板和Click板™开始。以PIC32MZ clicker作为您的开发板开始。

PIC32MZ clicker front image hardware assembly
Thermo 26 Click front image hardware assembly
Prog-cut hardware assembly
Micro B Connector clicker - upright/background hardware assembly
Necto image step 2 hardware assembly
Necto image step 3 hardware assembly
Necto image step 4 hardware assembly
Necto image step 5 hardware assembly
Necto image step 6 hardware assembly
Flip&Click PIC32MZ MCU step hardware assembly
Necto No Display image step 8 hardware assembly
Necto image step 9 hardware assembly
Necto image step 10 hardware assembly
Debug Image Necto Step hardware assembly

实时跟踪您的结果

应用程序输出

1. 应用程序输出 - 在调试模式下,“应用程序输出”窗口支持实时数据监控,直接提供执行结果的可视化。请按照提供的教程正确配置环境,以确保数据正确显示。

2. UART 终端 - 使用UART Terminal通过USB to UART converter监视数据传输,实现Click board™与开发系统之间的直接通信。请根据项目需求配置波特率和其他串行设置,以确保正常运行。有关分步设置说明,请参考提供的教程

3. Plot 输出 - Plot功能提供了一种强大的方式来可视化实时传感器数据,使趋势分析、调试和多个数据点的对比变得更加直观。要正确设置,请按照提供的教程,其中包含使用Plot功能显示Click board™读数的分步示例。在代码中使用Plot功能时,请使用以下函数:plot(insert_graph_name, variable_name);。这是一个通用格式,用户需要将“insert_graph_name”替换为实际图表名称,并将“variable_name”替换为要显示的参数。

软件支持

库描述

该库包含Go to Cloud (G2C) Click驱动程序的 API。

关键功能:

  • g2c_reset_device - 通过切换RST引脚重置设备。

  • g2c_set_net_creds - 设置WiFi网络凭据。

  • g2c_set_broker_creds - 设置代理凭据(设备密钥和密码)。

开源

代码示例

完整的应用程序代码和一个现成的项目可以通过NECTO Studio包管理器直接安装到NECTO Studio 应用程序代码也可以在MIKROE的GitHub账户中找到。

/*!
 * \file 
 * \brief G2C Click example
 * 
 * # Description
 * This example reads and processes data from G2C clicks.
 *
 * The demo application is composed of two sections :
 * 
 * ## Application Init 
 * Initializes driver and power module.
 * 
 * ## Application Task  
 * Reads the received data and parses it.
 * 
 * ## Additional Function
 * - g2c_process ( ) - The general process of collecting presponce 
 *                                   that sends a module.
 * 
 * ## Note
 * - WiFi credentials for Planet Debug utilization: username: MikroE Public
 *                                                  password: mikroe.guest
 * 
 * \author MikroE Team
 *
 */
// ------------------------------------------------------------------- INCLUDES

#include "board.h"
#include "log.h"
#include "g2c.h"
#include "string.h"

#define PROCESS_COUNTER 10
#define PROCESS_RX_BUFFER_SIZE 500
#define PROCESS_PARSER_BUFFER_SIZE 500

// ------------------------------------------------------------------ VARIABLES

static g2c_t g2c;
static log_t logger;

// AT commands
#define ATE               "ATE1"
#define AT                "AT"
#define AT_CEN            "AT+CEN=1"
#define AT_NWCR           "AT+NWCR"
#define AT_NWC            "AT+NWC=1"
#define AT_BRCR           "AT+BRCR"
#define AT_BRC            "AT+BRC=1"
#define AT_DSET           "AT+DSET"
#define AT_PUB            "AT+PUB"

// Sensor/Actuator reference
#define ACTUATOR_SW_REF   "G2C_TEST_AB"
#define ACTUATOR_STR_REF  "G2C_TEST_AS"
#define ACTUATOR_CNT_REF  "G2C_TEST_AC"
#define SENSOR_REF        "G2C_TEST_S"

// Operator settings
#define NETWORK_USERNAME  "network_username"
#define NETWORK_PASSWORD  "network_password"

// Broker(device) settings
#define DEVICE_KEY        "device_key"
#define DEVICE_PASSWORD   "device_password"

static char data_buf[ 20 ] = "12.2";
static char current_parser_buf[ PROCESS_PARSER_BUFFER_SIZE ];
static uint8_t send_data_cnt = 0; 

// ------------------------------------------------------- ADDITIONAL FUNCTIONS

static void g2c_process ( void )
{
    int32_t rsp_size;
    uint16_t rsp_cnt = 0;
    
    char uart_rx_buffer[ PROCESS_RX_BUFFER_SIZE ] = { 0 };
    uint8_t check_buf_cnt;
    uint8_t process_cnt = PROCESS_COUNTER;
    
    // Clear parser buffer
    memset( current_parser_buf, 0 , PROCESS_PARSER_BUFFER_SIZE ); 
    
    while( process_cnt != 0 )
    {
        rsp_size = g2c_generic_read( &g2c, &uart_rx_buffer, PROCESS_RX_BUFFER_SIZE );

        if ( rsp_size > 0 )
        {  
            // Validation of the received data
            for ( check_buf_cnt = 0; check_buf_cnt < rsp_size; check_buf_cnt++ )
            {
                if ( uart_rx_buffer[ check_buf_cnt ] == 0 ) 
                {
                    uart_rx_buffer[ check_buf_cnt ] = 13;
                }
            }
            log_printf( &logger, "%s", uart_rx_buffer );

            // Storages data in parser buffer
            rsp_cnt += rsp_size;
            if ( rsp_cnt < PROCESS_PARSER_BUFFER_SIZE )
            {
                strncat( current_parser_buf, uart_rx_buffer, rsp_size );
            }
            
            // Clear RX buffer
            memset( uart_rx_buffer, 0, PROCESS_RX_BUFFER_SIZE );
        } 
        else 
        {
            process_cnt--;
            
            // Process delay 
            Delay_100ms( );
        }
    }
}

static void actuator_demo( char *rsp )
{
    uint8_t sw_state;
    int16_t cnt_state;
    char str_data_buf[ 50 ];
    
    uint8_t err = G2C_PARSER_NO_ERROR;
    
    // Actuator switch example
    err = g2c_actuator_sw_parser( rsp, ACTUATOR_SW_REF, &sw_state );
    if ( err == G2C_PARSER_NO_ERROR )
    {
        log_printf( &logger, ">> ACTUATOR SW STATE: %d\r\n", sw_state );
    }

    // Actuator counter example
    err = g2c_actuator_cnt_parser(  rsp, ACTUATOR_CNT_REF, &cnt_state );
    if ( err == G2C_PARSER_NO_ERROR )
    {
        log_printf( &logger, ">> ACTUATOR CNT NUM: %d\r\n", cnt_state );
    }
    
    // Actuator string example
    err = g2c_actuator_str_parser(  rsp, ACTUATOR_STR_REF, str_data_buf );
    if ( err == G2C_PARSER_NO_ERROR )
    {
        log_printf( &logger, ">> ACTUATOR TEXT DATA: %s\r\n", str_data_buf );
    }
}
// ------------------------------------------------------ APPLICATION FUNCTIONS

void application_init ( void )
{
    log_cfg_t log_cfg;
    g2c_cfg_t cfg;

    /** 
     * Logger initialization.
     * Default baud rate: 115200
     * Default log level: LOG_LEVEL_DEBUG
     * @note If USB_UART_RX and USB_UART_TX 
     * are defined as HAL_PIN_NC, you will 
     * need to define them manually for log to work. 
     * See @b LOG_MAP_USB_UART macro definition for detailed explanation.
     */
    LOG_MAP_USB_UART( log_cfg );
    log_init( &logger, &log_cfg );
    log_info( &logger, "---- Application Init ----" );

    //  Click initialization.

    g2c_cfg_setup( &cfg );
    G2C_MAP_MIKROBUS( cfg, MIKROBUS_1 );
    g2c_init( &g2c, &cfg );

    // Power module.

    g2c_module_power( &g2c, true, 0 );
    g2c_reset( &g2c );
    
    // Send command.

    log_printf( &logger, ">> ATE \r\n" );
    g2c_send_command( &g2c, ATE );
    Delay_ms( 3000 );
    g2c_process( );

    log_printf( &logger, ">> AT \r\n" );
    g2c_send_command( &g2c, AT );
    Delay_ms( 3000 );
    g2c_process( );

    log_printf( &logger, ">> AT_CEN \r\n" );
    g2c_send_command( &g2c, AT_CEN );
    g2c_process( );

    log_printf( &logger, ">> NETWORK \r\n" );
    g2c_send_operator_cfg( &g2c, NETWORK_USERNAME, NETWORK_PASSWORD );
    g2c_process( );

    log_printf( &logger, ">> AT NWC \r\n" );
    g2c_send_command( &g2c, AT_NWC );
    g2c_process( );

    log_printf( &logger, ">> DEVICE \r\n" );
    g2c_send_broker_cfg( &g2c, DEVICE_KEY, DEVICE_PASSWORD );
    g2c_process( );

    log_printf( &logger, ">> AT BRC \r\n" );
    g2c_send_command( &g2c, AT_BRC ); 
    g2c_process( );

    Delay_ms( 3000 );
}

void application_task ( void )
{
    g2c_process( );
    actuator_demo( current_parser_buf );
    
    if ( send_data_cnt == 5 )
    {
       log_printf( &logger, ">> ACTUATOR REF \r\n" );  
       g2c_send_data_ref( &g2c, ACTUATOR_STR_REF, data_buf );
       g2c_process( );

       log_printf( &logger, ">> AT PUB \r\n" );
       g2c_send_command( &g2c, AT_PUB );
       g2c_process( );
       send_data_cnt = 0;
    }
    send_data_cnt++;
}

void main ( void )
{
    application_init( );

    for ( ; ; )
    {
        application_task( );
    }
}

// ------------------------------------------------------------------------ END

额外支持

资源

喜欢这个项目吗?

'购买此套件' 按钮会直接带您进入购物车,您可以在购物车中轻松添加或移除产品。