色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何利用rt-thread和HMI Board RA6M3開發一套物聯網工控機?

冬至子 ? 來源:MagicKingC ? 作者:MagicKingC ? 2023-09-15 15:27 ? 次閱讀

概述

近年來,隨著新一輪的科技發展以及工業產業升級,工業經濟慢慢的由數字化向網絡化和智能化發展。基于這一理念,本人利用rt-thread和HMI Board RA6M3開發了一套物聯網工控機。

1、功能介紹

物聯網工控機具有功能:

1、能夠連接ntp服務器獲取網絡時間,并且能夠將時間更新到rtc

2、具有WiFi連接功能

3、可以通過mqtt服務器控制外設

4、可以通過mqtt服務器獲取外設狀態

2、系統框架圖

1.jpg

2.jpg

3、功能實現

1、配置系統包

1.jpg

2.jpg

2、部分代碼戰術

mqtt線程代碼

#include "rtthread.h"
#include "wlan_mgnt.h"
#include "task_queue.h"
#include
#include "cjson.h"
#include "ui.h"
#include "mqttclient.h"
void LoadingBar_Animation(lv_obj_t TargetObject)
{
lv_anim_t PropertyAnimation_0;
lv_anim_init(&PropertyAnimation_0);
lv_anim_set_var(&PropertyAnimation_0, TargetObject);
lv_anim_set_exec_cb(&PropertyAnimation_0, (lv_anim_exec_xcb_t) lv_bar_set_value);
lv_anim_set_values(&PropertyAnimation_0, 0, 100);
lv_anim_set_time(&PropertyAnimation_0, 3000);
lv_anim_set_repeat_count(&PropertyAnimation_0, 0);
lv_anim_set_playback_time(&PropertyAnimation_0, 0);
lv_anim_start(&PropertyAnimation_0);
}
static char cid[64] = { 0 };
mqtt_client_t mqclient = NULL;
static void sub_topic_handle1(void
client, message_data_t
msg)
{
int result;
if (msg->message->payloadlen < 256)
{
result = rt_mq_send(&mqtt_mq,msg->message->payload,msg->message->payloadlen);
if (result != RT_EOK)
{
rt_kprintf("rt_mq_send ERRn");
}
}
}
static int mqtt_push(mqtt_client_t *client, const char *_data, size_t _data_len)
{
mqtt_message_t msg;
memset(&msg, 0, sizeof(msg));
msg.qos = QOS0;
msg.payload = (void *) _data;
msg.payloadlen = _data_len;
return mqtt_publish(client, "/ipc_iot/pub", &msg);
}
static char mqtt_send_buff[512] = { 0 };
static void sendCtrlMsg(mqtt_client_t *client, rt_uint32_t _data)
{
cJSON *root;
root = cJSON_CreateObject();
if (root != NULL)
{
cJSON_AddStringToObject(root, "type", "ctrl");
switch ((_data >> 28) & 0x0F)
{
case 0:
cJSON_AddStringToObject(root, "class", "key");
break;
case 1:
cJSON_AddStringToObject(root, "class", "elec1");
break;
case 2:
cJSON_AddStringToObject(root, "class", "elec2");
break;
case 3:
cJSON_AddStringToObject(root, "class", "elec3");
break;
}
cJSON data = cJSON_CreateObject();
cJSON_AddNumberToObject(data, "value", _data & 0x0fffffff);
cJSON_AddItemToObject(root, "data", data);
char json_str = cJSON_PrintUnformatted(root);
if (json_str != NULL)
{
int len = strlen(json_str);
if (len < sizeof(mqtt_send_buff))
{
memset(mqtt_send_buff, 0, sizeof(mqtt_send_buff));
memcpy(mqtt_send_buff, json_str, len);
mqtt_push(client, mqtt_send_buff, strlen(mqtt_send_buff));
}
free(json_str);
}
cJSON_Delete(root);
}
}
/

@param parameter
*/
static void mqtt_send_thread_entry(void *parameter)
{
rt_uint32_t mb_data;
rt_kprintf("mqtt_send_thread_entryrn");
mqtt_subscribe(mqclient, "/ipc_iot/sub", QOS0, sub_topic_handle1);
rt_kprintf("mqtt_publishrn");
rt_mb_send(&ctrl_mb, mb_data);
rt_thread_mdelay(500);
while (1)
{
if (rt_mb_recv(&ctrl_mb, &mb_data, RT_WAITING_FOREVER) == RT_EOK)
{
//0x0fffffff
rt_kprintf("mqtt_thread: get a mail from mailbox, the content:%08xn", mb_data);
sendCtrlMsg(mqclient, mb_data);
// rt_thread_mdelay(50);
}
}
}
void SetShowWinData(char *_data){
cJSON *root;
root = cJSON_Parse(_data);
if (root != NULL) {
cJSON *tmp;
tmp = cJSON_GetObjectItem(root, "type");
if (tmp != NULL) {
if (strcmp("show",tmp->valuestring) == 0) {
tmp = cJSON_GetObjectItem(root, "class");
if (tmp != NULL){
if (strcmp("temp",tmp->valuestring) == 0) {//溫度
cJSON *data = cJSON_GetObjectItem(root, "data");
if (data != NULL) {
tmp = cJSON_GetObjectItem(data, "value");
rt_kprintf("value:%dn",tmp->valueint);
lv_chart_set_next_value(ui_TempChart, ui_TempChartSeries, tmp->valueint);
}
}else if (strcmp("hum",tmp->valuestring) == 0) {//濕度
cJSON *data = cJSON_GetObjectItem(root, "data");
if (data != NULL) {
tmp = cJSON_GetObjectItem(data, "value");
rt_kprintf("value:%dn",tmp->valueint);
lv_label_set_text_fmt(ui_HumShow, "%d%%",tmp->valueint);
}
}else if (strcmp("elect",tmp->valuestring) == 0) {//轉速
cJSON *data = cJSON_GetObjectItem(root, "data");
if (data != NULL) {
tmp = cJSON_GetObjectItem(data, "value1");
rt_kprintf("value1:%dn",tmp->valueint);
lv_label_set_text_fmt(ui_Fan1Speed, "%d%%",tmp->valueint);
tmp = cJSON_GetObjectItem(data, "value2");
rt_kprintf("value2:%dn",tmp->valueint);
lv_label_set_text_fmt(ui_Fan2Speed, "%d%%",tmp->valueint);
tmp = cJSON_GetObjectItem(data, "value3");
rt_kprintf("value3:%dn",tmp->valueint);
lv_label_set_text_fmt(ui_Fan3Speed, "%d%%",tmp->valueint);
}
}else if (strcmp("all",tmp->valuestring) == 0) {//全部
cJSON *data = cJSON_GetObjectItem(root, "data");
if (data != NULL) {
tmp = cJSON_GetObjectItem(data, "value_temp");
rt_kprintf("value1:%dn",tmp->valueint);
lv_chart_set_next_value(ui_TempChart, ui_TempChartSeries, tmp->valueint);
tmp = cJSON_GetObjectItem(data, "value_hum");
rt_kprintf("value:%dn",tmp->valueint);
lv_label_set_text_fmt(ui_HumShow, "%d%%",tmp->valueint);
tmp = cJSON_GetObjectItem(data, "value_elect1");
rt_kprintf("value1:%dn",tmp->valueint);
lv_label_set_text_fmt(ui_Fan1Speed, "%d%%",tmp->valueint);
tmp = cJSON_GetObjectItem(data, "value_elect2");
rt_kprintf("value2:%dn",tmp->valueint);
lv_label_set_text_fmt(ui_Fan2Speed, "%d%%",tmp->valueint);
tmp = cJSON_GetObjectItem(data, "value_elect3");
rt_kprintf("value3:%dn",tmp->valueint);
lv_label_set_text_fmt(ui_Fan3Speed, "%d%%",tmp->valueint);
}
}
}
}
}
}
}
static void mqtt_recv_thread_entry(void *parameter)
{
rt_kprintf("mqtt_recv_thread_entryrn");
static char buf[128] = { 0 };
rt_thread_mdelay(500);
while (1)
{
memset(buf,0,sizeof(buf));
if (rt_mq_recv(&mqtt_mq, (void *)buf, sizeof(buf), RT_WAITING_FOREVER) > 0)
{
rt_kprintf("mqtt_recv_thread_entry:%sn", buf);
if (winClass == SHOW_WIN) {
SetShowWinData(buf);
}
}else {
rt_kprintf("recv_thread recv error!n");
}
}
}
rt_align(RT_ALIGN_SIZE)
static char mqtt_r_thread_stack[1024];
static struct rt_thread mqtt_r_thread;
static char mqtt_s_thread_stack[2048];
static struct rt_thread mqtt_s_thread;
int initMQTTTask(void)
{
rt_wlan_connect("test", "12345678");
lv_label_set_text(ui_LoadingText, "Loaded ");
LoadingImg_Animation(ui_LoadingImg, 0);
LoadingBar_Animation(ui_LoadingBar);
while (rt_wlan_is_connected() == RT_FALSE)
{
rt_thread_mdelay(50);
}
rt_thread_mdelay(500);
lv_label_set_text(ui_LoadingText, "Connect MQTT Server");
mqclient = mqtt_lease();
rt_snprintf(cid, sizeof(cid), "rtthread%d", rt_tick_get());
mqtt_set_host(mqclient, "192.168.8.178");
mqtt_set_port(mqclient, "1883");
mqtt_set_user_name(mqclient, "mqtt_client_iot");
mqtt_set_password(mqclient, "iot123456");
mqtt_set_client_id(mqclient, cid);
mqtt_set_clean_session(mqclient, 1);
KAWAII_MQTT_LOG_I("The ID of the Kawaii client is: %s rn", cid);
rt_thread_mdelay(500);
while (KAWAII_MQTT_CONNECT_FAILED_ERROR == mqtt_connect(mqclient))
{
rt_thread_mdelay(1000);
}
lv_label_set_text(ui_LoadingText, "MQTT Server OK");
rt_thread_mdelay(2500);
DisLoading_Animation(ui_LoadingPanel, 0);
rt_thread_mdelay(1000);
lv_obj_clear_flag(ui_MainPanel, LV_OBJ_FLAG_HIDDEN);
lv_obj_del(ui_LoadingPanel);
rt_thread_init(&mqtt_s_thread, "mqtt_s_t", mqtt_send_thread_entry, RT_NULL, &mqtt_s_thread_stack[0],
sizeof(mqtt_s_thread_stack), 18, 5);
rt_thread_startup(&mqtt_s_thread);
rt_thread_init(&mqtt_r_thread, "mqtt_r_t", mqtt_recv_thread_entry, RT_NULL, &mqtt_r_thread_stack[0],
sizeof(mqtt_r_thread_stack), 16, 5);
rt_thread_startup(&mqtt_r_thread);
return 0;
}
INIT_APP_EXPORT(initMQTTTask);
ntp線程代碼


#include "ui.h"
#include "rtthread.h"
#include "ui_events.h"
#include "task_queue.h"
#include "ntp.h"
#include "wlan_mgnt.h"
/**

@param parameter
*/
static void ntp_thread_entry(void *parameter)
{
rt_uint32_t mb_data;
time_t now;
struct tm *p;
rt_bool_t isSyncRTC = RT_FALSE;
if (rt_mb_recv(&ctrl_mb, &mb_data, RT_WAITING_FOREVER) == RT_EOK);
while (1)
{
now = time(RT_NULL);
p = localtime(&now);
if (winClass == MIAN_WIN)
{
lv_label_set_text_fmt(ui_TimerLabel,
"%04d-%02d-%02d %02d:%02d:%02dn",
(1900 + p->tm_year), (1 + p->tm_mon), p->tm_mday,p->tm_hour,p->tm_min, p->tm_sec);
}
if (isSyncRTC == RT_FALSE && rt_wlan_is_connected() == RT_TRUE)
{
isSyncRTC = RT_TRUE;
ntp_sync_to_rtc("ntp.rt-thread.org");
}else if (rt_wlan_is_connected() == RT_TRUE && p->tm_hour == 0 &&
p->tm_min == 0 && p->tm_sec == 0) {
ntp_sync_to_rtc("ntp.rt-thread.org");
}
rt_thread_mdelay(1000);
}
}
static struct rt_thread ntp_thread;
static char ntp_stack[1280];
int initNTPTask(void)
{
rt_thread_init(&ntp_thread, "main_ui", ntp_thread_entry, RT_NULL, & ntp_stack[0],
sizeof(ntp_stack),16, 5);
rt_thread_startup(&ntp_thread);
return 0;
}
INIT_APP_EXPORT(initNTPTask);

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 物聯網
    +關注

    關注

    2916

    文章

    45232

    瀏覽量

    380165
  • 工控機
    +關注

    關注

    10

    文章

    1780

    瀏覽量

    51037
  • NTP
    NTP
    +關注

    關注

    1

    文章

    196

    瀏覽量

    14058
  • RT-Thread
    +關注

    關注

    31

    文章

    1319

    瀏覽量

    40813
  • MQTT協議
    +關注

    關注

    0

    文章

    98

    瀏覽量

    5572
  • RA6M3
    +關注

    關注

    0

    文章

    52

    瀏覽量

    173
收藏 人收藏

    評論

    相關推薦

    RA6M3 HMI Board評測挑戰】-瑞薩RA6M3上的CAN實踐

    RA6M3 HMI Board 評測大挑戰】-瑞薩RA6M3上的CAN實踐
    的頭像 發表于 10-17 14:55 ?2248次閱讀
    【<b class='flag-5'>RA6M3</b> <b class='flag-5'>HMI</b> <b class='flag-5'>Board</b>評測挑戰】-瑞薩<b class='flag-5'>RA6M3</b>上的CAN實踐

    RT-Thread聯合瑞薩即將發布高性價比HMI Board

    高性能芯片 RA6M3RT-Thread 軟件生態,HMI Board 不僅硬件性能強勁,同時軟件生態豐富,助力開發者快速
    發表于 05-08 08:22

    【預告】RT-Thread聯合瑞薩即將發布高性價比HMI Board

    薩高性能芯片 RA6M3RT-Thread 軟件生態,HMI Board 不僅硬件性能強勁,同時軟件生態豐富,助力開發者快速
    的頭像 發表于 05-11 20:16 ?965次閱讀
    【預告】<b class='flag-5'>RT-Thread</b>聯合瑞薩即將發布高性價比<b class='flag-5'>HMI</b> <b class='flag-5'>Board</b>

    限量預售|2D加速、JPEG硬解、超高性價比M4芯片,您的圖形評估利器——HMI-Board來啦!

    能力。依托于瑞薩高性能芯片 RA6M3RT-Thread 軟件生態,HMI Board 不僅硬件性能強勁,同時軟件生態豐富,助力開發
    的頭像 發表于 05-16 05:45 ?1449次閱讀
    限量預售|2D加速、JPEG硬解、超高性價比<b class='flag-5'>M</b>4芯片,您的圖形評估利器——<b class='flag-5'>HMI-Board</b>來啦!

    聯合發布 | 2D加速、JPEG硬解、超高性價比M4芯片,您的圖形評估利器——HMI-Board來啦!

    MCU RA6M3RT-Thread軟件生態,HMI Board不僅硬件性能強勁,同時軟件生態豐富,助力開發者快速
    的頭像 發表于 05-19 15:15 ?1646次閱讀
    聯合發布 | 2D加速、JPEG硬解、超高性價比<b class='flag-5'>M</b>4芯片,您的圖形評估利器——<b class='flag-5'>HMI-Board</b>來啦!

    vscode+pyocd+daplink調試瑞薩ra6m3

    拿到了瑞薩的ra6m3的板子,發現使用RT-Thread Stduio下載速度很慢,就想著搭建個vscode的環境試試。
    的頭像 發表于 06-07 11:51 ?1565次閱讀

    RA6M3 HMI Board 之RTC實踐

    開發環境: RT-Thread Studio:v2.2.6 開發板:RA6M3 HMI Board
    的頭像 發表于 06-21 21:31 ?3089次閱讀
    <b class='flag-5'>RA6M3</b> <b class='flag-5'>HMI</b> <b class='flag-5'>Board</b> 之RTC實踐

    【線下培訓】上海臨港: RT-Thread × 瑞薩 工業監視器 RA6M3 HMI Board解決方案

    RT-Thread 與瑞薩將于10月14日在上海臨港舉行場線下培訓。 本次培訓將為開發者們帶來期待已久的熱門技術主題, RT-Thread × 瑞薩 工業監視器
    的頭像 發表于 09-07 17:40 ?887次閱讀
    【線下培訓】上海臨港: <b class='flag-5'>RT-Thread</b> × 瑞薩 工業監視器 <b class='flag-5'>RA6M3</b> <b class='flag-5'>HMI</b> <b class='flag-5'>Board</b>解決方案

    vscode+pyocd+daplink調試瑞薩ra6m3步驟

    拿到了瑞薩的ra6m3的板子,發現使用RT-Thread Stduio下載速度很慢,就想著搭建個vscode的環境試試。
    的頭像 發表于 09-14 14:47 ?1935次閱讀

    瑞薩RA6M3 HMI-Board Video Demo 上手指南

    高性能芯片 RA6M3RT-Thread 和 LVGL 軟件生態,HMI Board 不僅硬件性能強勁,同時軟件生態豐富,助力開發者快
    的頭像 發表于 09-15 18:25 ?1986次閱讀
    瑞薩<b class='flag-5'>RA6M3</b> <b class='flag-5'>HMI-Board</b> Video Demo 上手指南

    瑞薩 RA6M3 開發實踐指南-UART實踐

    RT-Thread即將發布系列RA6M3外設驅動的實踐指南,我們將使用瑞薩RA6M3 HMI-Board
    的頭像 發表于 09-23 12:15 ?1521次閱讀

    【議程發布】10月上海線下培訓:RT-Thread × 瑞薩 工業監視器+HMI解決方案!

    。 本次培訓RT-Thread將提供培訓用開發板: RA6M3 HMI Board 活動議程: ? 報名方式: 下列任意方式都可以免費報名參
    的頭像 發表于 09-28 18:45 ?608次閱讀
    【議程發布】10月上海線下培訓:<b class='flag-5'>RT-Thread</b> × 瑞薩 工業監視器+<b class='flag-5'>HMI</b>解決方案!

    【直播預告】基于RT-Thread &amp; LVGL RA6M3 HMI-Board兒童益智學習

    五晚,我們有幸邀請到了本次大賽的二等獎得主,他將與我們分享他的作品——基于RT-Thread LVGL RA6M3 HMI-Board兒童益智學習。 直播信息 直播主題 基于
    的頭像 發表于 11-30 19:05 ?674次閱讀
    【直播預告】基于<b class='flag-5'>RT-Thread</b> &amp; LVGL  <b class='flag-5'>RA6M3</b> <b class='flag-5'>HMI-Board</b>兒童益智學習<b class='flag-5'>機</b>

    RA6M3 RT-Thread* LVGL HMI Board開發實踐指南-GPIO實踐

    RT-Thread即將發布系列RA6M3外設驅動的實踐指南,我們將使用瑞薩RA6M3 HMI-Board
    的頭像 發表于 11-30 19:05 ?1460次閱讀
    <b class='flag-5'>RA6M3</b> <b class='flag-5'>RT-Thread</b>* LVGL <b class='flag-5'>HMI</b> <b class='flag-5'>Board</b><b class='flag-5'>開發</b>實踐指南-GPIO實踐

    HMI-Board OTA升級快速上手指南

    硬件平臺HMI-BoardRT-Thread聯合瑞薩推出的高性價比圖形評估套件,取代傳統的HMI+主控板硬件,一套硬件即可實現HMI+Io
    的頭像 發表于 01-18 11:46 ?298次閱讀
    <b class='flag-5'>HMI-Board</b> OTA升級快速上手指南
    主站蜘蛛池模板: 妞干网手机免费视频 | 欧美日韩免费看 | 素人约啪第五季 | 中文字幕高清在线中文字幕 | 九九色精品国偷自产视频 | 亚洲成AV人电影在线观看 | 老师洗澡让我吃她胸的视频 | 草b是什么感觉 | 富婆大保健嗷嗷叫普通话对白 | 强开少妇嫩苞又嫩又紧九色 | 午夜亚洲WWW湿好大 午夜性爽视频男人的天堂在线 | 国内精品欧美久久精品 | 亚洲 日韩 在线 国产 视频 | 久久五月综合婷婷中文云霸高清 | 亚洲精品久久区二区三区蜜桃臀 | 精品一区二区三区免费毛片 | 99精品观看 | 日本高清在线一区二区三区 | 鞋奴的视频VK | 国产成人高清在线观看播放 | 国产精品久久久久成人免费 | 天天狠狠弄夜夜狠狠躁·太爽了 | 91交换论坛| 干极品美女 | 神马电影院午夜神福利在线观看 | 晓雪老师我要进你里面好爽 | 大岛优香久久中文字幕 | 琪琪电影午夜理论片YY6080 | 最近中文字幕完整版免费 | 日韩欧美视频一区二区在线观看 | 最新亚洲一区二区三区四区 | 亚洲视频一 | 色欲人妻无码AV精品一区二区 | 亲爱的妈妈6韩国电影免费观看 | 入禽太深免费高清在线观看5 | 国产免费人成在线视频有码 | 最新国产在线视频 | 拔萝卜在线高清观看视频 | 久草在线一免费新视频 | 嫩草亚洲国产精品 | 久久九九久精品国产尤物 |