support aliyun sdk on TencentOS tiny
sample: examples\aliyun_iotkit_csdk_mqtt project: board\TencentOS_tiny_EVB_MX_Plus\KEIL\aliyun_iotkit_csdk_mqtt
This commit is contained in:
44
examples/aliyun_iotkit_csdk_mqtt/aliyun_iotkit_csdk_mqtt.c
Normal file
44
examples/aliyun_iotkit_csdk_mqtt/aliyun_iotkit_csdk_mqtt.c
Normal file
@@ -0,0 +1,44 @@
|
||||
#include "tos.h"
|
||||
|
||||
#define USE_ESP8266
|
||||
|
||||
#ifdef USE_LWIP
|
||||
#include "lwip/api.h"
|
||||
#include "lwip/sockets.h"
|
||||
#include "lwip/err.h"
|
||||
#include "lwip/sys.h"
|
||||
#endif
|
||||
|
||||
#ifdef USE_ESP8266
|
||||
#include "esp8266.h"
|
||||
#endif
|
||||
|
||||
void application_entry(void *arg)
|
||||
{
|
||||
extern void mqtt_basic_thread(void);
|
||||
|
||||
#ifdef USE_LWIP
|
||||
dns_init();
|
||||
MX_LWIP_Init();
|
||||
#endif
|
||||
|
||||
#ifdef USE_ESP8266
|
||||
extern int esp8266_sal_init(hal_uart_port_t uart_port);
|
||||
extern int esp8266_join_ap(const char *ssid, const char *pwd);
|
||||
esp8266_sal_init(HAL_UART_PORT_0);
|
||||
esp8266_join_ap("dcxajichu", "githubdev");
|
||||
#endif
|
||||
|
||||
#ifdef USE_NB_BC35
|
||||
extern int bc35_28_95_sal_init(hal_uart_port_t uart_port);
|
||||
bc35_28_95_sal_init(HAL_UART_PORT_0);
|
||||
#endif
|
||||
|
||||
mqtt_basic_thread();
|
||||
|
||||
while (1) {
|
||||
printf("This is a mqtt demo!\r\n");
|
||||
tos_task_delay(1000);
|
||||
}
|
||||
}
|
||||
|
250
examples/aliyun_iotkit_csdk_mqtt/mqtt_example.c
Normal file
250
examples/aliyun_iotkit_csdk_mqtt/mqtt_example.c
Normal file
@@ -0,0 +1,250 @@
|
||||
#include "dev_sign_api.h"
|
||||
#include "mqtt_api.h"
|
||||
|
||||
char DEMO_PRODUCT_KEY[IOTX_PRODUCT_KEY_LEN + 1] = {0};
|
||||
char DEMO_DEVICE_NAME[IOTX_DEVICE_NAME_LEN + 1] = {0};
|
||||
char DEMO_DEVICE_SECRET[IOTX_DEVICE_SECRET_LEN + 1] = {0};
|
||||
|
||||
void *HAL_Malloc(uint32_t size);
|
||||
void HAL_Free(void *ptr);
|
||||
void HAL_Printf(const char *fmt, ...);
|
||||
int HAL_GetProductKey(char product_key[IOTX_PRODUCT_KEY_LEN + 1]);
|
||||
int HAL_GetDeviceName(char device_name[IOTX_DEVICE_NAME_LEN + 1]);
|
||||
int HAL_GetDeviceSecret(char device_secret[IOTX_DEVICE_SECRET_LEN]);
|
||||
uint64_t HAL_UptimeMs(void);
|
||||
int HAL_Snprintf(char *str, const int len, const char *fmt, ...);
|
||||
|
||||
#define EXAMPLE_TRACE(fmt, ...) \
|
||||
do { \
|
||||
HAL_Printf("%s|%03d :: ", __func__, __LINE__); \
|
||||
HAL_Printf(fmt, ##__VA_ARGS__); \
|
||||
HAL_Printf("%s", "\r\n"); \
|
||||
} while(0)
|
||||
|
||||
void example_message_arrive(void *pcontext, void *pclient, iotx_mqtt_event_msg_pt msg)
|
||||
{
|
||||
iotx_mqtt_topic_info_t *topic_info = (iotx_mqtt_topic_info_pt) msg->msg;
|
||||
|
||||
switch (msg->event_type) {
|
||||
case IOTX_MQTT_EVENT_PUBLISH_RECEIVED:
|
||||
/* print topic name and topic message */
|
||||
EXAMPLE_TRACE("Message Arrived:");
|
||||
EXAMPLE_TRACE("Topic : %.*s", topic_info->topic_len, topic_info->ptopic);
|
||||
EXAMPLE_TRACE("Payload: %.*s", topic_info->payload_len, topic_info->payload);
|
||||
EXAMPLE_TRACE("\n");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
int example_subscribe(void *handle)
|
||||
{
|
||||
int res = 0;
|
||||
const char *fmt = "/%s/%s/user/get";
|
||||
char *topic = NULL;
|
||||
int topic_len = 0;
|
||||
|
||||
topic_len = strlen(fmt) + strlen(DEMO_PRODUCT_KEY) + strlen(DEMO_DEVICE_NAME) + 1;
|
||||
topic = HAL_Malloc(topic_len);
|
||||
if (topic == NULL) {
|
||||
EXAMPLE_TRACE("memory not enough");
|
||||
return -1;
|
||||
}
|
||||
memset(topic, 0, topic_len);
|
||||
HAL_Snprintf(topic, topic_len, fmt, DEMO_PRODUCT_KEY, DEMO_DEVICE_NAME);
|
||||
|
||||
res = IOT_MQTT_Subscribe(handle, topic, IOTX_MQTT_QOS0, example_message_arrive, NULL);
|
||||
if (res < 0) {
|
||||
EXAMPLE_TRACE("subscribe failed");
|
||||
HAL_Free(topic);
|
||||
return -1;
|
||||
}
|
||||
|
||||
HAL_Free(topic);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int example_publish(void *handle)
|
||||
{
|
||||
int res = 0;
|
||||
const char *fmt = "/%s/%s/user/get";
|
||||
char *topic = NULL;
|
||||
int topic_len = 0;
|
||||
char *payload = "{\"message\":\"hello!\"}";
|
||||
|
||||
topic_len = strlen(fmt) + strlen(DEMO_PRODUCT_KEY) + strlen(DEMO_DEVICE_NAME) + 1;
|
||||
topic = HAL_Malloc(topic_len);
|
||||
if (topic == NULL) {
|
||||
EXAMPLE_TRACE("memory not enough");
|
||||
return -1;
|
||||
}
|
||||
memset(topic, 0, topic_len);
|
||||
HAL_Snprintf(topic, topic_len, fmt, DEMO_PRODUCT_KEY, DEMO_DEVICE_NAME);
|
||||
|
||||
res = IOT_MQTT_Publish_Simple(0, topic, IOTX_MQTT_QOS0, payload, strlen(payload));
|
||||
if (res < 0) {
|
||||
EXAMPLE_TRACE("publish failed, res = %d", res);
|
||||
HAL_Free(topic);
|
||||
return -1;
|
||||
}
|
||||
|
||||
HAL_Free(topic);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void example_event_handle(void *pcontext, void *pclient, iotx_mqtt_event_msg_pt msg)
|
||||
{
|
||||
EXAMPLE_TRACE("msg->event_type : %d", msg->event_type);
|
||||
}
|
||||
|
||||
/*
|
||||
* NOTE: About demo topic of /${productKey}/${deviceName}/user/get
|
||||
*
|
||||
* The demo device has been configured in IoT console (https://iot.console.aliyun.com)
|
||||
* so that its /${productKey}/${deviceName}/user/get can both be subscribed and published
|
||||
*
|
||||
* We design this to completely demonstrate publish & subscribe process, in this way
|
||||
* MQTT client can receive original packet sent by itself
|
||||
*
|
||||
* For new devices created by yourself, pub/sub privilege also requires being granted
|
||||
* to its /${productKey}/${deviceName}/user/get for successfully running whole example
|
||||
*/
|
||||
|
||||
int mqtt_basic_thread(int argc, char *argv[])
|
||||
{
|
||||
void *pclient = NULL;
|
||||
int res = 0;
|
||||
int loop_cnt = 0;
|
||||
iotx_mqtt_param_t mqtt_params;
|
||||
|
||||
HAL_GetProductKey(DEMO_PRODUCT_KEY);
|
||||
HAL_GetDeviceName(DEMO_DEVICE_NAME);
|
||||
HAL_GetDeviceSecret(DEMO_DEVICE_SECRET);
|
||||
|
||||
EXAMPLE_TRACE("mqtt example");
|
||||
|
||||
/* Initialize MQTT parameter */
|
||||
/*
|
||||
* Note:
|
||||
*
|
||||
* If you did NOT set value for members of mqtt_params, SDK will use their default values
|
||||
* If you wish to customize some parameter, just un-comment value assigning expressions below
|
||||
*
|
||||
**/
|
||||
memset(&mqtt_params, 0x0, sizeof(mqtt_params));
|
||||
|
||||
/**
|
||||
*
|
||||
* MQTT connect hostname string
|
||||
*
|
||||
* MQTT server's hostname can be customized here
|
||||
*
|
||||
* default value is ${productKey}.iot-as-mqtt.cn-shanghai.aliyuncs.com
|
||||
*/
|
||||
/* mqtt_params.host = "something.iot-as-mqtt.cn-shanghai.aliyuncs.com"; */
|
||||
|
||||
/**
|
||||
*
|
||||
* MQTT connect port number
|
||||
*
|
||||
* TCP/TLS port which can be 443 or 1883 or 80 or etc, you can customize it here
|
||||
*
|
||||
* default value is 1883 in TCP case, and 443 in TLS case
|
||||
*/
|
||||
/* mqtt_params.port = 1883; */
|
||||
|
||||
/**
|
||||
*
|
||||
* MQTT request timeout interval
|
||||
*
|
||||
* MQTT message request timeout for waiting ACK in MQTT Protocol
|
||||
*
|
||||
* default value is 2000ms.
|
||||
*/
|
||||
/* mqtt_params.request_timeout_ms = 2000; */
|
||||
|
||||
/**
|
||||
*
|
||||
* MQTT clean session flag
|
||||
*
|
||||
* If CleanSession is set to 0, the Server MUST resume communications with the Client based on state from
|
||||
* the current Session (as identified by the Client identifier).
|
||||
*
|
||||
* If CleanSession is set to 1, the Client and Server MUST discard any previous Session and Start a new one.
|
||||
*
|
||||
* default value is 0.
|
||||
*/
|
||||
/* mqtt_params.clean_session = 0; */
|
||||
|
||||
/**
|
||||
*
|
||||
* MQTT keepAlive interval
|
||||
*
|
||||
* KeepAlive is the maximum time interval that is permitted to elapse between the point at which
|
||||
* the Client finishes transmitting one Control Packet and the point it starts sending the next.
|
||||
*
|
||||
* default value is 60000.
|
||||
*/
|
||||
/* mqtt_params.keepalive_interval_ms = 60000; */
|
||||
|
||||
/**
|
||||
*
|
||||
* MQTT write buffer size
|
||||
*
|
||||
* Write buffer is allocated to place upstream MQTT messages, MQTT client will be limitted
|
||||
* to send packet no longer than this to Cloud
|
||||
*
|
||||
* default value is 1024.
|
||||
*
|
||||
*/
|
||||
/* mqtt_params.write_buf_size = 1024; */
|
||||
|
||||
/**
|
||||
*
|
||||
* MQTT read buffer size
|
||||
*
|
||||
* Write buffer is allocated to place downstream MQTT messages, MQTT client will be limitted
|
||||
* to recv packet no longer than this from Cloud
|
||||
*
|
||||
* default value is 1024.
|
||||
*
|
||||
*/
|
||||
/* mqtt_params.read_buf_size = 1024; */
|
||||
|
||||
/**
|
||||
*
|
||||
* MQTT event callback function
|
||||
*
|
||||
* Event callback function will be called by SDK when it want to notify user what is happening inside itself
|
||||
*
|
||||
* default value is NULL, which means PUB/SUB event won't be exposed.
|
||||
*
|
||||
*/
|
||||
mqtt_params.handle_event.h_fp = example_event_handle;
|
||||
|
||||
pclient = IOT_MQTT_Construct(&mqtt_params);
|
||||
if (NULL == pclient) {
|
||||
EXAMPLE_TRACE("MQTT construct failed");
|
||||
return -1;
|
||||
}
|
||||
|
||||
res = example_subscribe(pclient);
|
||||
if (res < 0) {
|
||||
IOT_MQTT_Destroy(&pclient);
|
||||
return -1;
|
||||
}
|
||||
|
||||
while (1) {
|
||||
if (0 == loop_cnt % 20) {
|
||||
example_publish(pclient);
|
||||
}
|
||||
|
||||
IOT_MQTT_Yield(pclient, 200);
|
||||
|
||||
loop_cnt += 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Reference in New Issue
Block a user