主题中讨论的其他器件: UNIFLASH
大家好、
我正在尝试使用 MQTT 连接到 Google IoT Core、但到目前为止它无法正常工作。
我已经验证了本地 MQTT 客户端所需的凭据(例如 ClientID 和密码)(在本例中为 google 的物联网内核所需的 JWT 令牌)是否正确。 我能够连接到我的注册设备并发布消息。
但是、当我尝试将其与 CC3220SF 连接时、串行终端上会显示以下错误消息:
我检查了证书、并验证它实际上是 GlobalSign 证书、所以我在这里真的很困惑。 这是我偶尔会遇到的最常见的错误、但根据我上传的根证书、有时也会遇到-468、-458、-457或-2005。 我尝试过的所有根证书都直接从 google 下载、从证书存储库(PKI.goog/repository/)或从其 MQTT-bridge 示例页面 cloud.google.com/iot/docs/how-tos/mqtt-bridge下载。
我通过 Uniflash 按此方式上传它们:
我遵循了 SDK 中的空 MQTT 示例、并能够通过安全连接连接到 eclipse 代理。 我扩展了代码并添加了 Google IoT 内核所需的凭据、但我必须做一些错误、因为我无法连接到他们的 MQTT 代理。
以下是我的代码的一部分:
#define ClientID "projects/myProjectId/locations/europe-west1/Registry/myRegistry/devices/qdevice"
#define MQTT_CLIENT_PASSWORD "myJWTtoken"
#define MQTT_CLIENT_USERNAME "未使用"#define
MQTT_CLIENT_KEEPALIVE 60
#define MQTT_CLIENT_CLEAR_CONNECT TRUE
#define MQTT_CLIENT_MQTT_V3_1 false
#define MQTT_CLIENT_BLOCK_SEND true
char * MQTTClient_secureFiles[1]={"gsr2.pem"};
#define MQTT_CONNECTION_FLAGS MQTTCLIENT_NETCONN_URL | MQTCLIENT_NETCONN_SEC
#define MQTT_CONNECT_ADDRESS "mqtt.googleapis.com
#define MQTT_CONNECT_PORT_NUMBER 8883
#define SL_TASKSTACKSIZE 2048
#define sawn_task_priority 9
MQTT_IF_InitParams_t mqttInitParams =
{
MQTT_MODULE_TASK_STACK_SIZE、// MQTT 模块的堆栈大小
MQTT_MODULE_TASK_PRIORITY // MQTT 的线程优先级
};
MQTT_IF_ClientParams_t mqttClientParams =
{
ClientID、 //客户端 ID
MQTT_CLIENT_USERNAME、 //用户名
MQTT_CLIENT_PASSWORD、 //密码
MQTT_CLIENT_KEEPALIVE、 //保持活动时间
MQTT_CLIENT_CLEAR_CONNECT、//清除连接标志
MQTT_CLIENT_MQTT_V3_1、 // true = 3.1,false = 3.1.1
MQTT_CLIENT_Blocking_send、//阻止发送标志
};
MQTTClient_ConnParams mqttConnParams =
{
MQTT_CONNECT_FLAGS、 //连接标志
MQTT_CONNECT_ADDRESS、 //服务器地址
MQTT_CONNECT_PORT_NUMBER、 // MQTT 服务器的端口号
SLNETSOCK_SEC_METHOD_TLSv1_2、 //安全套接字的方法
SLNETSOCK_SEC_Cip_full_list、 //安全套接字的密码
1、 //安全连接的文件数
MQTTClient_sureFiles //安全文件
};
//调用 MQTT_IF_handler 时,应使用提供事件回调。
* MQTT 客户端模块将使用此回调在发生某些 MQTT 事件(例如连接、断开等)时通知主应用程序*/
void MQTT_EventCallback (Int32_t 事件)
{
switch (event){
案例 MQTT_EVENT_CONNACK:
{
log_info ("mqTT_event_CONNACK\r\n");
中断;
}
案例 MQTT_EVENT_CLIENT_DISCONNECT:
{
log_info ("mqTT_event_client_ddisconnect\r\n");
中断;
}
案例 MQTT_EVENT_SERVER_DISCONNECT:
{
log_info ("mqTT_event_Server_disconnect\r\n");
中断;
}
案例 MQTT_EVENT_SA销毁:
{
log_info ("mqTT_event_destroy\r\n");
中断;
}
默认值:
{
log_info ("未知 MQTT 事件\r\n);
中断;
}
}
}/*
WiFi 初始化器*/
int WifiInit(){
int32_t ret;
SlWlanSecParams_t security_params;
pthread_t spawn_thread =(pthread_t) NULL;
pthread_attr_t pattrs_spawn;
struct sched_param prI_param;
pthread_attr_init (&pattrs_spawn);
PRI_param.sched_priority = sawn_task_priority;
RET = pthread_attr_setschedparam (&pattrs_spawn、&pri_param);
RET |= pthread_attr_setstacksize (&pattrs_spawn、sl_TASKSTACKSIZE);
RET |= pthread_attr_setdetachstate (&pattrs_spawn、pthread_create_detached);
RET = pthread_create (&spawn_thread、&pattrs_spawn、sl_Task、NULL);
if (ret!= 0){
log_error ("无法创建 simplelink 任务\n\r");
while (1);
}
network_if_ResetMCUStateMachine();
network_if_deInitDriver();
RET = Network_IF_InitDriver (Role_STA);
if (ret < 0){
log_error ("无法启动 SimpleLink 设备\n\r");
while (1);
}
// SetClientIdNamefromMacAddress();
security_params.Key =(signed char*) security_key;
security_params.KeyLen = strlen (security_key);
security_params.Type = security_type;
RET = Network_IF_ConnectAP (SSID_NAME、SECURITY_params);
if (ret < 0){
log_error ("连接到 AP 失败\n\r\n);
}
否则{
RET = sl_WlanProfileAdd ((signed char*) ssn_name、strlen (ssid_name)、0、&security_params、NULL、 7、0);
if (ret < 0){
log_error ("添加配置文件%s\r\n 失败"、SSID_NAME);
}
否则{
log_info ("配置文件已添加%s\r\n、SSID_NAME);
}
}
return;
}
void MQTTDemo (char* topic、char* payload、uint8_t QoS)
{
log_info ("主题:%s 有效载荷:%s QoS:%d\r\n"、主题、有效载荷、QoS);
}
/*
=== mainThread ====
//
void * mainThread (void * arg0)
{
/* 1秒延迟*/
uint32_t 时间= 1;
/* MQTT 变量*/
int32_t ret;
UART_Handle uartHandle;
MQTTClient_handle mqttClientHandle;
GPIO_init();
spi_init();
/*打开 UART 实例以启用应用程序打印*/
uartHandle = InitTerm();
UART_CONTROL (uartHandle、UART_CMD_RXDISABLE、空);
/*初始化 MQTT 客户端模块的 IP 网络服务层*/
RET = ti_net_slNet_initconfig();
if (0!= ret)
{
log_error ("初始化 SlNetSock\n\r\n 失败");
}
/*调用 WifiInit()以启动网络处理器并连接到接入点*/
RET = WifiInit();
if (ret < 0){
while (1);
}
settime();
/*初始化 MQTT 客户端模块*/
RET = MQTT_IF_Init (mqttInitParams);
if (ret < 0){
while (1);
}
RET = MQTT_IF_Subscribe (mqttClientHandle、"/devices/mydevice/events、MQTT_QOS_1、MQTTDemo);//Google 不支持 QoS 2
if (ret < 0){
while (1);
}
否则{
log_info ("已成功订阅所有主题\r\n);
}
/*连接 MQTT 代理并注册事件回拨*/
mqttClientHandle = MQTT_IF_Connect (mqttClientParams、mqttConnParams、MQTT_EventCallback);
if (mqttClientHandle < 0){
while (1);
}
while (1){
睡眠(时间);
MQTT_IF_Publish (mqttClientHandle、
"/devices/qdevice/events "、
"您好\r\n、
strlen ("hello\r\n")、
MQTT_QOS_0);
}
}