当前位置: 首页 > news >正文

网站建设策划方案t优化网站排名推荐公司

网站建设策划方案t,优化网站排名推荐公司,怎么看一个网站做外链,长沙网站设计工作室目录 一.创建产品 二.创建对应物模型 三.创建设备 四.生成密文 五.导出设备获取ID号 六.测试连接 7.SMT32 连接 usart 准备 NBLOT部分 MAIN.C 代码说名 token等系统信息修改 反向控制修改 上传数据 一.创建产品 其他的无所谓随便选 二.创建对应物模型 三.创建设…

目录

一.创建产品

二.创建对应物模型

三.创建设备

四.生成密文

五.导出设备获取ID号

六.测试连接

7.SMT32 连接

usart 准备

NBLOT部分

MAIN.C

代码说名

token等系统信息修改

反向控制修改

上传数据


一.创建产品

其他的无所谓随便选

二.创建对应物模型

三.创建设备

四.生成密文

需要的参数为设备密钥,产品ID

import base64
import hmac
from urllib.parse import quote
import time# 中国移动官方文档给出的核心秘钥计算算法
def token(id,access_key):version = '2018-10-31'res = 'products/%s' % id  # 通过产品ID访问产品API# 用户自定义token过期时间et = str(int(time.time()) + 63072000) # 设置为2年有效时间# 签名方法,支持md5、sha1、sha256method = 'sha1'# 对access_key进行decodekey = base64.b64decode(access_key)# 计算signorg = et + '\n' + method + '\n' + res + '\n' + versionsign_b = hmac.new(key=key, msg=org.encode(), digestmod=method)sign = base64.b64encode(sign_b.digest()).decode()# value 部分进行url编码,method/res/version值较为简单无需编码sign = quote(sign, safe='')res = quote(res, safe='')# token参数拼接token = 'version=%s&res=%s&et=%s&method=%s&sign=%s' % (version, res, et, method, sign)return tokenusername    = "3Y2lA72Nyc"                                           # 产品ID
accesskey   = "bmdjb0dlS0lCZjlIOXFsNnhIWVBkalZwT0hsU0IwSVY="         # accessKey
password = token(username, accesskey)
print(password)

五.导出设备获取ID号

导出的是表格形式

六.测试连接

前提准备

设备名 dve2

user name

密钥

topic

static const char *TOPIC_A = "$sys/产品ID/设备名/thing/property/set"; 

static const char *TOPIC_B = "$sys/ID/dve2/设备/property/post";

7.SMT32 连接

usart 准备


//硬件驱动
#include "usart.h"
#include "delay.h"//C库
#include <stdarg.h>
#include <string.h>
#include <stdio.h>/*
************************************************************
*	函数名称:	Usart1_Init
*
*	函数功能:	串口1初始化
*
*	入口参数:	baud:设定的波特率
*
*	返回参数:	无
*
*	说明:		TX-PA9		RX-PA10
************************************************************
*/
void Usart1_Init(unsigned int baud)
{GPIO_InitTypeDef gpio_initstruct;USART_InitTypeDef usart_initstruct;NVIC_InitTypeDef nvic_initstruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);//PA9	TXDgpio_initstruct.GPIO_Mode = GPIO_Mode_AF_PP;gpio_initstruct.GPIO_Pin = GPIO_Pin_9;gpio_initstruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &gpio_initstruct);//PA10	RXDgpio_initstruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;gpio_initstruct.GPIO_Pin = GPIO_Pin_10;gpio_initstruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &gpio_initstruct);usart_initstruct.USART_BaudRate = baud;usart_initstruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;		//无硬件流控usart_initstruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;						//接收和发送usart_initstruct.USART_Parity = USART_Parity_No;									//无校验usart_initstruct.USART_StopBits = USART_StopBits_1;								//1位停止位usart_initstruct.USART_WordLength = USART_WordLength_8b;							//8位数据位USART_Init(USART1, &usart_initstruct);USART_Cmd(USART1, ENABLE);														//使能串口USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);									//使能接收中断nvic_initstruct.NVIC_IRQChannel = USART1_IRQn;nvic_initstruct.NVIC_IRQChannelCmd = ENABLE;nvic_initstruct.NVIC_IRQChannelPreemptionPriority = 0;nvic_initstruct.NVIC_IRQChannelSubPriority = 2;NVIC_Init(&nvic_initstruct);}/*
************************************************************
*	函数名称:	Usart2_Init
*
*	函数功能:	串口2初始化
*
*	入口参数:	baud:设定的波特率
*
*	返回参数:	无
*
*	说明:		TX-PA2		RX-PA3
************************************************************
*/
void Usart2_Init(unsigned int baud)
{GPIO_InitTypeDef gpio_initstruct;USART_InitTypeDef usart_initstruct;NVIC_InitTypeDef nvic_initstruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);//PA2	TXDgpio_initstruct.GPIO_Mode = GPIO_Mode_AF_PP;gpio_initstruct.GPIO_Pin = GPIO_Pin_2;gpio_initstruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &gpio_initstruct);//PA3	RXDgpio_initstruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;gpio_initstruct.GPIO_Pin = GPIO_Pin_3;gpio_initstruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &gpio_initstruct);usart_initstruct.USART_BaudRate = baud;usart_initstruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;		//无硬件流控usart_initstruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;						//接收和发送usart_initstruct.USART_Parity = USART_Parity_No;									//无校验usart_initstruct.USART_StopBits = USART_StopBits_1;								//1位停止位usart_initstruct.USART_WordLength = USART_WordLength_8b;							//8位数据位USART_Init(USART2, &usart_initstruct);USART_Cmd(USART2, ENABLE);														//使能串口USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);									//使能接收中断nvic_initstruct.NVIC_IRQChannel = USART2_IRQn;nvic_initstruct.NVIC_IRQChannelCmd = ENABLE;nvic_initstruct.NVIC_IRQChannelPreemptionPriority = 0;nvic_initstruct.NVIC_IRQChannelSubPriority = 0;NVIC_Init(&nvic_initstruct);}/*
************************************************************
*	函数名称:	Usart_SendString
*
*	函数功能:	串口数据发送
*
*	入口参数:	USARTx:串口组
*				str:要发送的数据
*				len:数据长度
*
*	返回参数:	无
*
*	说明:		
************************************************************
*/
void Usart_SendString(USART_TypeDef *USARTx, unsigned char *str, unsigned short len)
{unsigned short count = 0;for(; count < len; count++){USART_SendData(USARTx, *str++);									//发送数据while(USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET);		//等待发送完成}}/*
************************************************************
*	函数名称:	UsartPrintf
*
*	函数功能:	格式化打印
*
*	入口参数:	USARTx:串口组
*				fmt:不定长参
*
*	返回参数:	无
*
*	说明:		
************************************************************
*/
void UsartPrintf(USART_TypeDef *USARTx, char *fmt,...)
{unsigned char UsartPrintfBuf[296];va_list ap;unsigned char *pStr = UsartPrintfBuf;va_start(ap, fmt);vsnprintf((char *)UsartPrintfBuf, sizeof(UsartPrintfBuf), fmt, ap);							//格式化va_end(ap);while(*pStr != 0){USART_SendData(USARTx, *pStr++);while(USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET);}
}/*
************************************************************
*	函数名称:	DEBUG_LOG
*
*	函数功能:	格式化输出调试信息
*
*	入口参数:	fmt:不定长参*	返回参数:	无
*
*	说明:		
************************************************************
*/
void DEBUG_LOG(char *fmt,...)
{unsigned char UsartPrintfBuf[296];va_list ap;unsigned char *pStr = UsartPrintfBuf;va_start(ap, fmt);vsnprintf((char *)UsartPrintfBuf, sizeof(UsartPrintfBuf), fmt, ap);							//格式化va_end(ap);UsartPrintf(USART_DEBUG, "[LOG] /> ");while(*pStr != 0){USART_SendData(USART_DEBUG, *pStr++);while(USART_GetFlagStatus(USART_DEBUG, USART_FLAG_TC) == RESET);}UsartPrintf(USART_DEBUG, "\r\n");
}
/*
************************************************************
*	函数名称:	USART1_IRQHandler
*
*	函数功能:	串口1收发中断
*
*	入口参数:	无
*
*	返回参数:	无
*
*	说明:		
************************************************************
*/
u8 i;
u16 buf[20],res;
u8 receiving_flag = 0; // 新增一个标志,用于标记是否开始接收数组
void USART1_IRQHandler(void)
{if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断{res = USART_ReceiveData(USART1);USART_ClearFlag(USART1, USART_FLAG_RXNE);}
}
#ifndef _USART_H_
#define _USART_H_#include "stm32f10x.h"#define USART_DEBUG		USART1		//调试打印所使用的串口组void Usart1_Init(unsigned int baud);void Usart2_Init(unsigned int baud);void Usart_SendString(USART_TypeDef *USARTx, unsigned char *str, unsigned short len);void UsartPrintf(USART_TypeDef *USARTx, char *fmt,...);void DEBUG_LOG(char *fmt,...);#endif

NBLOT部分

#include "NB_Lot.h"
#include "lcd.h"
#include "usart.h"#include <stdio.h>
#include <string.h>/* NB-IoT模块工作步骤列表 */
enum {TASK_NBIOT_AT_PREPARE = 0,TASK_NBIOT_AT_PREPARE2,TASK_NBIOT_AT_TEST,TASK_NBIOT_AT_TEST_RSP,TASK_NBIOT_DISABLE_PSM,TASK_NBIOT_DISABLE_PSM_RSP,TASK_NBIOT_DISABLE_ECHO,TASK_NBIOT_DISABLE_ECHO_RSP,TASK_NBIOT_SET_BAND,TASK_NBIOT_SET_BAND_RSP,TASK_NBIOT_DHCP,TASK_NBIOT_DHCP_RSP,TASK_NBIOT_MQTT_OPEN,TASK_NBIOT_MQTT_OPEN_RSP,TASK_NBIOT_MQTT_CONNECT,TASK_NBIOT_MQTT_CONNECT_RSP,TASK_NBIOT_MQTT_GET_TOPIC,TASK_NBIOT_GET_DATA,TASK_NBIOT_MQTT_PRE_SEND,TASK_NBIOT_MQTT_SEND,TASK_NBIOT_MQTT_CHECK_DATA,TASK_NBIOT_MQTT_CLOSE,TASK_NBIOT_FINISH,TASK_NBIOT_ERROR,TASK_NBIOT_ERROR_RSP,
};extern float temperature,TDS_value,PH;
extern u8 water;/*腾讯云MQTT服务器信息*/
//域名
//static const char *DOMAIN = "020L7JSU2A.iotcloud.tencentdevices.com";
static const char *DOMAIN = "175.178.30.200";
//端口
static const char *PORT="1883";
//客户端ID
static const char *CLIENT_ID = "0001";
//用户名
static const char *USERNAME = "2KFIR2QXNX0001;12010126;9DWJ5;2032687910";
//密码
static const char *PASSWORD = "4bdd5d1e7bcb69327da2c7feb20f0af9f428964da1d542f86ee4465e3b985bd8;hmacsha256";
//主题
static const char *TOPIC_A = "$thing/up/property/2KFIR2QXNX/0001";static const char *TOPIC_B = "$thing/down/property/2KFIR2QXNX/0001";/* NB-IoT模块工作步骤 */
static int nbStep;/* 计时器 */
static int timeCounter;/* 屏幕显示字符串 */
static char lcdString[16];/* AT指令字符串 */
static char atString[256];/* 数据字符串 */
static char dataString[256];/* AT指令发送标记 */
static uint8_t isSendAT;uint8_t svcMsgBuf[SVC_MSG_BUF_MAX];const char *params[] = {"SSS", "aaa"}; // 你需要提取的参数名称
int paramValues[2];  // 你需要提取的参数名称
/*当前缓冲区已存放的字节数量*/
volatile uint16_t svcMsgCounter = 0;
int paramCount = 2;static int atDefaultCheck(void);
static int atDHCPCheck(void);
static int atMqttOpenCheck(void);
static int atMqttConnectCheck(void);
static int atDataCheck(const char *params[], int paramCount, int paramValues[]);
static int atSendAndCheckData(const char *dataString, const char *params[], int paramCount, int paramValues[]);
/*
************************************************************
*	函数名称:	USART1_IRQHandler
*
*	函数功能:	串口1收发中断
*
*	入口参数:	无
*
*	返回参数:	无
*
*	说明:		
************************************************************
*/
void USART2_IRQHandler(void)
{unsigned char byte = 0;if (USART_GetITStatus(NB_Lot_USARTx, USART_IT_RXNE) != RESET) {byte = USART_ReceiveData(NB_Lot_USARTx); // Auto to clear RXNE flag when read!
//				USART_SendData(USART2,byte);svcMsgBuf[svcMsgCounter++] = byte;}else USART_ClearFlag(NB_Lot_USARTx,USART_FLAG_TC);
}
/*
* 读取接收到的数据
* @param buf 读取到数据的存储地址
* @param len 待读取数据的长度
*
* @return 
*/
uint16_t svcMsgRead(uint8_t *buf, uint16_t len)
{//实际读取的数据长度uint16_t size;//如果缓冲区中没有数据,那么结束本函数if (svcMsgCounter == 0){return 0;}//计算实际读取的数据长度if (len > svcMsgCounter){size = svcMsgCounter;}else{size = len;} //从缓冲区中取出数据memcpy(buf, svcMsgBuf, size);//svcMsgCounter = 0;if(svcMsgCounter>size){uint16_t i,j;for(i=0,j=size;j<svcMsgCounter;i++,j++){svcMsgBuf[i]=svcMsgBuf[j];}}    svcMsgCounter=svcMsgCounter-size;return size;
}
/** 向串口发送信息** @param buf - 待发送的信息的存储地址* @param len - 待发送的信息的数据长度*/
void halUartWrite(const unsigned char *buf, unsigned int len)
{for (unsigned int i = 0; i < len; i++) {USART_SendData(NB_Lot_USARTx, buf[i]);while(USART_GetFlagStatus(NB_Lot_USARTx, USART_FLAG_TXE) == RESET);}
}
/*
* 发送字符串
* @param string 待发送的字符串
*/
int svcMsgWriteString(const char *string)
{halUartWrite((uint8_t *)string, strlen(string));return 0;
}
void dataUploadRunner(void)
{switch (nbStep) {/* AT Prepare1 */case TASK_NBIOT_AT_PREPARE:OLED_ShowCH(0,6,"CMD: Prepare");svcMsgWriteString("AT+QMTDISC=0\r\n");nbStep++;timeCounter = 0;break;case TASK_NBIOT_AT_PREPARE2:OLED_ShowCH(0,6,"CMD: Prepare2");svcMsgWriteString("AT+QRST=1\r\n");nbStep++;break;/* AT Test */case TASK_NBIOT_AT_TEST:OLED_ShowCH(0,6,"CMD: AT      ");svcMsgWriteString("AT\r\n");nbStep++;break;/* Response: AT Test */case TASK_NBIOT_AT_TEST_RSP:OLED_ShowCH(0,6,"RSP: AT      ");if (atDefaultCheck() == 0) nbStep++;else nbStep--;break;/* Disable PSM */case TASK_NBIOT_DISABLE_PSM:OLED_ShowCH(0,6,"CMD: QSCLK=0      ");svcMsgWriteString("AT+QSCLK=0\r\n");nbStep++;break;/* Response: Disable PSM */case TASK_NBIOT_DISABLE_PSM_RSP:OLED_ShowCH(0,6,"RSP: QSCLK=0      ");if (atDefaultCheck() == 0) nbStep++;else nbStep--;break;/* Disable Echo */case TASK_NBIOT_DISABLE_ECHO:OLED_ShowCH(0,6,"CMD: ATE0      ");svcMsgWriteString("ATE0\r\n");nbStep++;break;/* Response: Disable Echo */case TASK_NBIOT_DISABLE_ECHO_RSP:OLED_ShowCH(0,6,"RSP: ATE0      ");if (atDefaultCheck() == 0) nbStep++;else nbStep--;break;/* Set Band */case TASK_NBIOT_SET_BAND:OLED_ShowCH(0,6,"CMD: QBAND=8      ");svcMsgWriteString("AT+QBAND=1,8\r\n");nbStep++;break;/* Response: Set Band */case TASK_NBIOT_SET_BAND_RSP:OLED_ShowCH(0,6,"RSP: QBAND=8      ");if (atDefaultCheck() == 0) nbStep++;else nbStep--;break;/* DHCP */case TASK_NBIOT_DHCP:OLED_ShowCH(0,6,"CMD: DHCP      ");svcMsgWriteString("AT+CGPADDR?\r\n");nbStep++;timeCounter = 0;break;/* Response: DHCP */case TASK_NBIOT_DHCP_RSP:OLED_ShowCH(0,6,"RSP: DHCP      ");timeCounter++;if(timeCounter>=1&& atDHCPCheck() == 0){nbStep++;}else if(timeCounter>=3){nbStep--;}break;/* MQTT Open */case TASK_NBIOT_MQTT_OPEN:OLED_ShowCH(0,6,"CMD: QMTOPEN      ");sprintf(atString, "AT+QMTOPEN=0,\"%s\",1883\r\n", DOMAIN);svcMsgWriteString(atString);nbStep++;timeCounter = 0;break;/* Response: MQTT Open */case TASK_NBIOT_MQTT_OPEN_RSP:OLED_ShowCH(0,6,"RSP: QMTOPEN      ");timeCounter++;if(timeCounter>=1&& atMqttOpenCheck() == 0){nbStep++;}else if(timeCounter>=3){nbStep = TASK_NBIOT_ERROR;}break;/* MQTT Connect */case TASK_NBIOT_MQTT_CONNECT:OLED_ShowCH(0,6,"CMD: QMTCONN      ");sprintf(atString, "AT+QMTCONN=0,\"%s\",\"%s\",\"%s\"\r\n", CLIENT_ID, USERNAME, PASSWORD);svcMsgWriteString(atString);nbStep++;timeCounter = 0;break;/* Response: MQTT Connect */case TASK_NBIOT_MQTT_CONNECT_RSP:OLED_ShowCH(0,6,"RSP: QMTCONN      ");timeCounter++;if (timeCounter>=1&&atMqttConnectCheck() == 0){
//						svcLogWriteLcd(0,0, (uint8_t *)"", 0, 0);nbStep++;}else if(timeCounter >= 3){//svcLogWriteLcd(0,0, (uint8_t *)"conn tiemout", 0, 0);svcMsgWriteString("AT+QMTDISC=0\r\n");nbStep = TASK_NBIOT_ERROR;}break;case TASK_NBIOT_MQTT_GET_TOPIC:OLED_ShowCH(0,6,"RSP:GET_TOPIC  ");sprintf(atString, "AT+QMTSUB=0,1,\"%s\",0\r\n", TOPIC_B);svcMsgWriteString(atString);nbStep++;/* Get data */case TASK_NBIOT_GET_DATA:OLED_ShowCH(0,6,"CMD: get data    ");nbStep++;break;/* MQTT Pre-Send */case TASK_NBIOT_MQTT_PRE_SEND:OLED_ShowCH(0,6,"CMD: QMTPUB      ");sprintf(dataString, "{\"method\":\"report\",\"clientToken\":\"123\",\"timestamp\":1628646783,\"params\":{\"wd\":%f,\"tds\":%f,\"ph\":%f,\"hz\":%d}}",temperature,TDS_value,PH,water);sprintf(atString, "AT+QMTPUB=0,0,0,0,\"%s\",%d\r\n", TOPIC_A, strlen(dataString));svcMsgWriteString(atString);nbStep++;timeCounter = 0;isSendAT=0;break;/* MQTT Send and Check Data */case TASK_NBIOT_MQTT_SEND:OLED_ShowCH(0,6,"CMD:SendAndCheck");if(isSendAT==0){svcMsgWriteString(dataString);isSendAT=1;}timeCounter++;if (timeCounter >= 8 || atSendAndCheckData(dataString, params,paramCount, paramValues) == 0) {nbStep = TASK_NBIOT_GET_DATA;if (paramValues[0] != -1)OLED_ShowNum(0,2,paramValues[0],3,16);if (paramValues[1] != -1)OLED_ShowNum(0,4,paramValues[1],3,16);}break;/* Process Data */case TASK_NBIOT_MQTT_CHECK_DATA:OLED_ShowCH(0,6,"CMD:CHECK DATA ");if (paramValues[0] != -1)OLED_ShowNum(0,2,paramValues[0],3,16);if (paramValues[1] != -1)OLED_ShowNum(0,4,paramValues[1],3,16);nbStep = TASK_NBIOT_GET_DATA;break;/* MQTT Close */case TASK_NBIOT_MQTT_CLOSE:OLED_ShowCH(0,6,"CMD: CLOSE      ");svcMsgWriteString("AT+QMTDISC=0\r\n");nbStep++;break;/* Finish */case TASK_NBIOT_FINISH:OLED_ShowCH(0,6,"CMD: Finish      ");break;/* RESET */case TASK_NBIOT_ERROR:OLED_ShowCH(0,6,"CMD: RESET      ");svcMsgWriteString("AT+QRST=1\r\n");nbStep++;timeCounter = 0;break;/* RSP: RESET */case TASK_NBIOT_ERROR_RSP:timeCounter++;if(atDefaultCheck() == 0){nbStep = TASK_NBIOT_DHCP;}else if (timeCounter >= 3) {nbStep = TASK_NBIOT_DHCP;}else{nbStep--;}break;default: break;}
}/*
* 基础AT指令结果检测
*/
int atDefaultCheck()
{uint16_t len;uint8_t buf[20];memset(buf, 0, sizeof(buf));len = svcMsgRead(buf, sizeof(buf));if (len == 0) return -1;//taskNbiotDebug(buf, len);if (strstr((char *)buf, "OK") != NULL) return 0;return -1;
}
/*
* 检测服务器下发的数据,并提取指定参数的值
*/
int atDataCheck(const char *params[], int paramCount, int paramValues[])
{uint16_t len;uint8_t buf[SVC_MSG_BUF_MAX + 1];memset(buf, 0, sizeof(buf));len = svcMsgRead(buf, sizeof(buf));if (len == 0) return -1;for (int i = 0; i < paramCount; i++) {char searchStr[50];snprintf(searchStr, sizeof(searchStr), "\"%s\":", params[i]);char *start = strstr((char *)buf, searchStr);if (start == NULL) {paramValues[i] = -1; // 标记未找到的参数continue;}start += strlen(searchStr);char *end = strchr(start, ',');if (end == NULL) {end = strchr(start, '}');if (end == NULL) return -1;}char numberStr[10];memset(numberStr, 0, sizeof(numberStr));strncpy(numberStr, start, end - start);paramValues[i] = atoi(numberStr);}return 0;
}
/*
* DHCP AT指令结果检测
*/
int atDHCPCheck()
{uint16_t len;uint8_t buf[SVC_MSG_BUF_MAX + 1];memset(buf, 0, sizeof(buf));len = svcMsgRead(buf, sizeof(buf));if (len == 0) return -1;//taskNbiotDebug(buf, len);if (strstr((char *)buf, "OK") == NULL) return -1;char *start = strstr((char *)buf, "+CGPADDR: ");if (start == NULL) return -1;char *ip = start + 13;char *end = strchr(ip, '"');if (end == NULL) return -1;*end = 0;if (strlen(ip) < 7) return -1;return 0;
}
/*
* 发送数据并检测服务器下发的数据
*/
int atSendAndCheckData(const char *dataString, const char *params[], int paramCount, int paramValues[])
{uint16_t len;uint8_t buf[SVC_MSG_BUF_MAX + 1];memset(buf, 0, sizeof(buf));// 发送数据svcMsgWriteString(dataString);// 读取数据len = svcMsgRead(buf, sizeof(buf));if (len == 0) return -1;// 检查发送结果if (strstr((char *)buf, "OK") != NULL) {// 检查服务器下发的数据for (int i = 0; i < paramCount; i++) {char searchStr[50];snprintf(searchStr, sizeof(searchStr), "\"%s\":", params[i]);char *start = strstr((char *)buf, searchStr);if (start == NULL) {paramValues[i] = -1; // 标记未找到的参数continue;}start += strlen(searchStr);char *end = strchr(start, ',');if (end == NULL) {end = strchr(start, '}');if (end == NULL) return -1;}char numberStr[10];memset(numberStr, 0, sizeof(numberStr));strncpy(numberStr, start, end - start);paramValues[i] = atoi(numberStr);}return 0;}return -1;
}/*
* MQTT Open AT指令结果检测
*/
int atMqttOpenCheck()
{uint16_t len;uint8_t buf[SVC_MSG_BUF_MAX + 1];memset(buf, 0, sizeof(buf));len = svcMsgRead(buf, sizeof(buf));if (len == 0) return -1;//taskNbiotDebug(buf, len);if (strstr((char *)buf, "+QMTOPEN: 0,0") != NULL) return 0;return -1;
}/*
* MQTT Conn AT指令结果检测
*/
int atMqttConnectCheck()
{uint16_t len;uint8_t buf[SVC_MSG_BUF_MAX + 1];memset(buf, 0, sizeof(buf));len = svcMsgRead(buf, sizeof(buf));if (len == 0) return -1;//taskNbiotDebug(buf, len);if (strstr((char *)buf, "+QMTCONN: ") != NULL) return 0;return -1;
}
#ifndef __NB_LOT_H 
#define __NB_LOT_H  
#include "stm32f10x.h"                  // Device header#define SVC_MSG_BUF_MAX     500#define NB_Lot_USARTx     USART2void dataUploadRunner(void);
uint16_t svcMsgRead(uint8_t *buf, uint16_t len);#endif

MAIN.C

#include "stm32f10x.h"                  // Device header
#include "delay.h"
#include "lcd.h"
#include "ds1302.h"
#include "IOput.h"
#include "usart.h"
#include "nblot.h" 
#include "timer.h"
u8 show_flag, show1_flag, light=0;u8 webTime;
void TIM2_IRQHandler(void)   //TIM2中断
{if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源 {TIM_ClearITPendingBit(TIM2, TIM_IT_Update  );  //清除TIMx的中断待处理位:TIM 中断源 webTime++;}
}extern u8 IRQdata;
extern u8 res1;
int main (void)
{delay_init();NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);OLED_Clear();	OLED_Init(); delay_ms(1);OLED_Clear();input_init();output_init();Usart2_Init(9600); TIM2_Int_Init(71,9999);    
//  	      MQTTconnect();
//	        delay_ms(1000);
//	  SendATcommand("AT\r\n");
//	  delay_ms(1000);
//	  SendATcommand("AT+MQTTCONN=0,"175.178.30.200",1883,"0001","A4RKGYL86E0001;12010126;S1XV6;2043455836","e7a438948af1bf1fa8c21cf2ad2ee6c980381fd59a59066a4626bef7543ee866;hmacsha256"\r")//175.178.30.200 域名");
//  	MQTTconnect();
//	  delay_ms(1000);
//		MQTTconnect();
//	  delay_ms(1000);
//		MQTTconnect();Usart1_Init(9600);
//			SendATcommand("AT+MQTTDISC=0\r");while(1)
{        if(webTime>=150){MQTTconnect();webTime=0;
//					USART_SendData(USART1, 1); }//        OLED_ShowCH(0,0,"1111");OLED_ShowNum(0,0,webTime,2,16);
//				OLED_ShowNum(0,4,ATresult,2,16);
//		  OLED_ShowNum(0,4,AsroproArray[6],2,16);
//		  OLED_ShowNum(40,4,AsroproArray[7],2,16);
//			OLED_ShowNum(80,4,AsroproArray[8],2,16);
//      if (!show1_flag){
//			}}
}

代码说名

token等系统信息修改

反向控制修改

<!--注意如果要加反向控制,必须上传程序里也有此数据,和腾讯云的nb不太一样-->

<!--因为oneNet反向控制接收到数据 必须还要做回应,单片机如果做其他操作特别容易超时,我直接把数据解析出来在从新上传了-->

                                     <!--下面的情况可以不用管-->

上传数据

http://www.dtcms.com/a/487914.html

相关文章:

  • 网站建设怎么设计更加吸引人免费建设网站
  • 网站开发中都引用什么文献绍兴网络推广公司
  • Qtday1
  • 基于langgraph agent的SQL DB知识库系统
  • 宿松县住房和城乡建设局网站a5源码网站
  • 用网站开发客户发邮件如何电话推销客户做网站
  • 怎样做网站发布信息南京seo排名
  • 品牌电商网站设计领卷网站怎么做的
  • 网站代电子商务建立网站前期准备
  • Matlab安装硬件支持包
  • 接口测试 | Postman的安装和测试使用
  • 江门广告网站推广技巧网站全部用根目录
  • Linux -- 线程概念
  • 湛江免费建站杭州网络有限公司
  • Zabbix 监控系统模板、监控项、图形方位指南
  • 网站建设都有哪些搬瓦工wordpress
  • 网站不交换友情链接可以吗网站建设公司讯息
  • 免费建微网站平台网站建设福州
  • 迁移后运维与监控:构建企业级RustFS运维体系
  • 做网站优化竞价区别wordpress选了中文还是英文版
  • c2c网站建设要多少钱北京市建设质量监督网站
  • 【Linux系统】文件IO
  • 网站建设咨询什么wordpress 热门关键字
  • 制作网站首先要知道什么做网站运用的技术
  • discuz做的网站做英文网站要会什么
  • 如何在国外网站做免费推广发布网站后备案
  • 网站制作建设公司wordpress vue
  • 广州网站建设哪里好外网网站管理制度建设
  • 网站推广工作是在网站发布之后开展的龙海网络推广
  • Debian12安装Docker、Docker-compose构建CICD