指令介绍

串口通信协议

Guition 是一种串口屏开发平台,通过串口与其他设备进行通信。以下是关于 Guition 串口屏通信协议的详细介绍:

通信方式

Guition 串口屏通过串口与主控设备进行通信,常见的串口通信方式包括 UART、RS232 和 RS485。

数据格式

Guition 串口屏通信数据使用 JSON 格式进行传输,JSON 格式的数据具有良好的可读性和易于解析的特点,便于设备之间的数据交换和解析。

使用详解

主控设备向 Guition 串口屏发送 JSON 格式的命令数据,Guition 串口屏接收到数据后解析并执行相应的操作。常见的命令包括显示文本、绘制图形、控制控件状态等。

以下是一个示例的 JSON 格式命令:

{
  "command": "display_text",
  "params": {
    "txt": "Hello, World!",
    "pos": [100, 50],
    "font": 16,
    "color": "#"
  }
}

参数说明

  • command: 命令名称,表示要执行的操作,如显示文本、绘制图形等。

  • params: 参数对象,包含命令所需的具体参数。

    • text: 要显示的文本内容。

    • pos: 文本显示的位置,以屏幕左上角为原点,用 {x, y} 表示坐标。

    • font: 文本的字体大小。

    • color: 文本的颜色。

更详细的数据格式和参数说明可参考 Guition 的控件详解文档,以获取每个控件支持的命令和参数列表。

Guition 串口屏通信协议使用 JSON 格式进行数据交换,简单易懂,便于开发人员进行使用和调试。

使用单片机调试 Guition 串口屏通信

Guition 串口屏是一种通过串口与其他设备进行通信的显示设备,为了保证串口通信的正常进行,可以通过单片机进行调试。以下是使用单片机调试 Guition 串口屏通信的步骤说明:

  1. 准备工作

    • 确保 Guition 串口屏已经连接到单片机的串口端口,并且电源正常供电。

    • 在单片机上准备一个串口通信的程序,用于发送 JSON 格式的命令数据给 Guition 串口屏。

  2. 编写调试程序

    • 在单片机上编写一个程序,通过串口向 Guition 串口屏发送命令数据。

    • 可以编写一个简单的程序,发送显示文本的命令,以验证通信是否正常。

  3. 发送命令数据

    • 在调试程序中,以 JSON 格式构建要发送的命令数据,包括命令名称和参数。

    • 使用单片机的串口发送函数将命令数据发送给 Guition 串口屏。

  4. 观察串口输出

    • 在调试过程中,通过单片机的串口调试功能或外部串口监视器,观察串口输出的情况。

    • 可以查看串口输出是否正常,以及 Guition 串口屏是否正确执行了接收到的命令。

  5. 调试和优化

    • 根据观察到的串口输出情况,调试和优化单片机程序。

    • 可以逐步增加发送不同命令的功能,测试 Guition 串口屏的各种功能是否正常。

  6. 反馈和修改

    • 根据调试结果,对 Guition 串口屏通信协议进行修改和优化。

    • 如果发现通信存在问题,可以根据串口输出的反馈信息,调整命令数据格式或参数,以确保通信的稳定和可靠。

以下是一个使用 STM32 单片机调试 Guition 串口屏通信的简单示例代码:

#include "stm32f4xx_hal.h"
#include <stdio.h>
#include <string.h>

// 定义串口句柄
UART_HandleTypeDef huart2;

// Guition 串口屏通信命令,具体指令请以指令示例中为准
char command[] = "{\"command\": \"display_text\", \"params\": {\"text\": \"Hello, STM32!\", \"position\": {\"x\": 100, \"y\": 50}, \"font_size\": 16, \"color\": \"red\"}}#\n";

// 函数原型
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART2_UART_Init(void);

int main(void)
{
    // 初始化 HAL 库
    HAL_Init();

    // 配置系统时钟
    SystemClock_Config();

    // 初始化所有的硬件资源
    MX_GPIO_Init();
    MX_USART2_UART_Init();

    // 发送 Guition 串口屏通信命令
    HAL_UART_Transmit(&huart2, (uint8_t *)command, strlen(command), HAL_MAX_DELAY);

    while (1)
    {
    }
}

// 配置系统时钟
void SystemClock_Config(void)
{
    RCC_OscInitTypeDef RCC_OscInitStruct = {0};
    RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

    __HAL_RCC_PWR_CLK_ENABLE();
    __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

    RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
    RCC_OscInitStruct.HSEState = RCC_HSE_ON;
    RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
    RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
    RCC_OscInitStruct.PLL.PLLM = 8;
    RCC_OscInitStruct.PLL.PLLN = 336;
    RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
    RCC_OscInitStruct.PLL.PLLQ = 7;
    if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
    {
        Error_Handler();
    }

    RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
    RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
    RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
    RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
    RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
    if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
    {
        Error_Handler();
    }
}

// 初始化 GPIO
static void MX_GPIO_Init(void)
{
    __HAL_RCC_GPIOA_CLK_ENABLE();
    __HAL_RCC_GPIOB_CLK_ENABLE();
    __HAL_RCC_GPIOC_CLK_ENABLE();
    __HAL_RCC_GPIOD_CLK_ENABLE();
    __HAL_RCC_GPIOH_CLK_ENABLE();
}

// 初始化 USART2
static void MX_USART2_UART_Init(void)
{
    huart2.Instance = USART2;
    huart2.Init.BaudRate = 115200;
    huart2.Init.WordLength = UART_WORDLENGTH_8B;
    huart2.Init.StopBits = UART_STOPBITS_1;
    huart2.Init.Parity = UART_PARITY_NONE;
    huart2.Init.Mode = UART_MODE_TX_RX;
    huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
    huart2.Init.OverSampling = UART_OVERSAMPLING_16;
    if (HAL_UART_Init(&huart2) != HAL_OK)
    {
        Error_Handler();
    }
}

这个示例代码通过 STM32F4 单片机的 USART2 模块与 Guition 串口屏进行通信。在 main() 函数中,发送了一个显示文本的命令给 Guition 串口屏。请注意,需要根据实际情况修改串口通信的波特率和 GPIO 引脚配置。

以下是一个使用 Arduino 单片机控制 Guition 串口屏的简单示例代码:

#include <Arduino.h>
#include <SoftwareSerial.h>

// 定义串口引脚
#define RX_PIN 10
#define TX_PIN 11

// 创建软串口对象
SoftwareSerial mySerial(RX_PIN, TX_PIN);

// Guition 串口屏通信命令,具体指令请以指令示例中为准
String command = "{\"command\": \"display_text\", \"params\": {\"text\": \"Hello, Arduino!\", \"position\": {\"x\": 100, \"y\": 50}, \"font_size\": 16, \"color\": \"red\"}}\n";

void setup() {
  // 初始化串口
  Serial.begin(9600);
  mySerial.begin(9600);

  // 等待串口初始化完成
  delay(100);

  // 发送 Guition 串口屏通信命令
  mySerial.print(command);
}

void loop() {
  // 主程序循环
}

这个示例代码通过 Arduino 的软串口库与 Guition 串口屏进行通信。在 setup() 函数中,发送了一个显示文本的命令给 Guition 串口屏。请注意,需要根据实际情况修改串口通信的波特率和引脚配置。