/*-----------------------------------------------------*/
/* µÛÔ¼¿ÆÓ¢STM32ϵÁпª·¢°å */
/*-----------------------------------------------------*/
/* ³ÌÐò½á¹¹ */
/*-----------------------------------------------------*/
/*out1 -> B14
out2 -> B5
out3 -> B8
out4 -> B6
key -> A10
GA6_RST->C13
GAT_CHECK->B1
ָʾµÆ->B10
ESP8266_RST->A0
scl->A6
sda->A5
*/
/*-----------------------------------------------------*/
#include "stm32f10x.h" //°üº¬ÐèÒªµÄÍ·Îļþ
#include "main.h" //°üº¬ÐèÒªµÄÍ·Îļþ
#include "delay.h"
#include "usart1.h" //°üº¬ÐèÒªµÄÍ·Îļþ
#include "usart2.h" //°üº¬ÐèÒªµÄÍ·Îļþ
#include "timer2.h" //°üº¬ÐèÒªµÄÍ·Îļþ
#include "timer3.h" //°üº¬ÐèÒªµÄÍ·Îļþ
#include "timer4.h" //°üº¬ÐèÒªµÄÍ·Îļþ
#include "GA6.h" //°üº¬ÐèÒªµÄÍ·Îļþ
#include "led.h" //°üº¬ÐèÒªµÄÍ·Îļþ
#include "mqtt.h" //°üº¬ÐèÒªµÄÍ·Îļþ
#include "dht11.h"
#include "lcd.h"
#include "distance.h"
#include "ADXL345.h"
#include "sys.h"
#include "usart.h"
#include "ut.h"
#include "ds18b20.h"
#include "bsp_adc.h"
//#include "oled.h"
char *CMD1 = "APP+DTSW=1C"; //¿ª¹Ø1¿ØÖÆÃüÁ״̬·×ª£¬¿ª->¹Ø ¹Ø->¿ª
extern int weiyi;
int wendu=97;
int yali=96;
#define x 48 //´Ë´¦¸Ä±äÆÁÄ»ÏÔʾλÖÃ
#define y 2
#define x2 4
#define y2 4
#define uint unsigned int
// ADC1ת»»µÄµçѹֵͨ¹ýMDA·½Ê½´«µ½SRAM
extern __IO uint16_t ADC_ConvertedValue[NOFCHANEL];
// ¾Ö²¿±äÁ¿£¬ÓÃÓÚ±£´æ×ª»»¼ÆËãºóµÄµçѹֵ
float ADC_ConvertedValueLocal[NOFCHANEL];
float S2,S4,S1; //¾àÀë
extern volatile float distance;
u8 temperature;
u8 humidity;
int main(void)
{
int i=21,j=0;
u8 devid;
u8 aa[20] = {"Distance :"};
//u16 DS18B20Temp=20;
//u16 DHT11Temp=20;
//Ultrasound_Init();
delay_init();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
uart_init(115200); //´®¿Ú³õʼ»¯Îª115200
ADCx_Init();
DS18B20_Init();
//OLED_Init();
//OLED_Clear();
//OLED_ShowString(0,0,aa,16);
LCD_Init(); //³õʼ»¯LCD
POINT_COLOR=BLACK;
Usart1_Init(9600); //´®¿Ú1¹¦Äܳõʼ»¯£¬²¨ÌØÂÊ9600
Usart2_Init(115200); //´®¿Ú2¹¦Äܳõʼ»¯£¬²¨ÌØÂÊ115200
TIM4_Init(300,7200); //TIM4³õʼ»¯£¬¶¨Ê±Ê±¼ä 300*7200*1000/72000000 = 30ms
LED_Init(); //LED³õʼ»¯
MQTT_Buff_Init(); //³õʼ»¯½ÓÊÕ,·¢ËÍ,ÃüÁîÊý¾ÝµÄ »º³åÇø ÒÔ¼°¸÷״̬²ÎÊý
AliIoT_Parameter_Init(); //³õʼ»¯Á¬½ÓOneNetÔÆIoTƽ̨MQTT·þÎñÆ÷µÄ²ÎÊý
while(DHT11_Init()) //DHT11³õʼ»¯
{
LCD_ShowString(30,130,200,16,16,"DHT11 Error");
delay_ms(200);
LCD_Fill(30,130,239,130+16,WHITE);
delay_ms(200);
}
LCD_ShowString(30,40,200,16,16,"QIAO QIAO WO MEN DUI");
LCD_ShowString(30,60,200,16,16,"2023-7");
Init_ADXL345();
devid=Single_Read_ADXL345(0X00); //¶Á³öµÄÊý¾ÝΪ0XE5,±íʾÕýÈ·
while(1) //Ö÷Ñ»·
{
Multiple_read_ADXL345(); //Á¬Ðø¶Á³öÊý¾Ý£¬´æ´¢ÔÚBUFÖÐ
//Multiple_read_ADXL345
//DS18B20Temp=DS18B20_Get_Temp()/10;
DHT11_Read_Data(&temperature,&humidity); //¶ÁÈ¡ÎÂʪ¶ÈÖµ
//wendu = (int)DS18B20Temp;
//OLED_ShowString(0,2,"TEM:",16);
//OLED_ShowString(0,4,"AD:",16);
LCD_ShowString(30,80,200,16,16,"TEM:");
LCD_ShowString(30,100,200,16,16,"HUM:");
LCD_ShowString(30,120,200,16,16,"AD:");
//LCD_ShowString(30,178,100,16,16,aa);
LCD_ShowString(30,140,36,16,16,"X:");
LCD_ShowString(30,160,36,16,16,"Y:");
LCD_ShowString(30,180,36,16,16,"Z:");
if(i>20){
i = 0;
//Send();
ADC_ConvertedValueLocal[1] =(float) ADC_ConvertedValue[1]/4096*3.3;
yali = (int)(ADC_ConvertedValue[1]/30);
}
i++;
j++;
//OLED_ShowNum(40,4,yali,3,16);
//OLED_ShowNum(40,2,wendu,3,16);
LCD_ShowNum(60,120,yali,2,16);//X_num
LCD_ShowNum(70,80,temperature,2,16);
LCD_ShowNum(70,100,humidity,2,16);
LCD_ShowNum(58,140,X_num,2,16);
LCD_ShowNum(58,160,Y_num,2,16);
LCD_ShowNum(58,180,Z_num,2,16);
/*--------------------------------------------------------------------*/
/* Connect_flag=1ͬ·þÎñÆ÷½¨Á¢ÁËÁ¬½Ó,ÎÒÃÇ¿ÉÒÔ·¢²¼Êý¾ÝºÍ½ÓÊÕÍÆËÍÁË */
/*--------------------------------------------------------------------*/
if(Connect_flag==1){
/*-------------------------------------------------------------*/
/* ´¦Àí·¢ËÍ»º³åÇøÊý¾Ý */
/*-------------------------------------------------------------*/
if(MQTT_TxDataOutPtr != MQTT_TxDataInPtr){ //if³ÉÁ¢µÄ»°£¬ËµÃ÷·¢ËÍ»º³åÇøÓÐÊý¾ÝÁË
//3ÖÖÇé¿ö¿É½øÈëif
//µÚ1ÖÖ£º0x10 Á¬½Ó±¨ÎÄ
//µÚ2ÖÖ£º0x82 ¶©Ôı¨ÎÄ£¬ÇÒConnectPack_flagÖÃ룬±íʾÁ¬½Ó±¨Îijɹ¦
//µÚ3ÖÖ£ºSubcribePack_flagÖÃλ£¬ËµÃ÷Á¬½ÓºÍ¶©Ôľù³É¹¦£¬ÆäËû±¨ÎĿɷ¢
if((MQTT_TxDataOutPtr[1]==0x10)||((MQTT_TxDataOutPtr[1]==0x82)&&(ConnectPack_flag==1))||(SubcribePack_flag==1)){
u1_printf("·¢ËÍÊý¾Ý:0x%x\r\n",MQTT_TxDataOutPtr[0]); //´®¿ÚÌáʾÐÅÏ¢
MQTT_TxData(MQTT_TxDataOutPtr); //·¢ËÍÊý¾Ý
MQTT_TxDataOutPtr += BUFF_UNIT; //Ö¸ÕëÏÂÒÆ
if(MQTT_TxDataOutPtr==MQTT_TxDataEndPtr) //Èç¹ûÖ¸Õëµ½»º³åÇøÎ²²¿ÁË
MQTT_TxDataOutPtr = MQTT_TxDataBuf[0]; //Ö¸Õë¹éλµ½»º³åÇø¿ªÍ·
}
}//´¦Àí·¢ËÍ»º³åÇøÊý¾ÝµÄelse if·ÖÖ§½áβ
/*-------------------------------------------------------------*/
/* ´¦Àí½ÓÊÕ»º³åÇøÊý¾Ý */
/*-------------------------------------------------------------*/
if(MQTT_RxDataOutPtr != MQTT_RxDataInPtr){ //if³ÉÁ¢µÄ»°£¬ËµÃ÷½ÓÊÕ»º³åÇøÓÐÊý¾ÝÁË
u1_printf("½ÓÊÕµ½Êý¾Ý:%x\r\n",MQTT_RxDataOutPtr[0]);
/*-----------------------------------------------------*/
/* ´¦ÀíCONNACK±¨ÎÄ */
/*-----------------------------------------------------*/
//ifÅжϣ¬Èç¹ûÒ»¹²½ÓÊÕÁË4¸ö×Ö½Ú£¬µÚÒ»¸ö×Ö½ÚÊÇ0x20£¬±íʾÊÕµ½µÄÊÇCONNACK±¨ÎÄ
//½Ó×ÅÎÒÃÇÒªÅжϵÚ4¸ö×Ö½Ú£¬¿´¿´CONNECT±¨ÎÄÊÇ·ñ³É¹¦
if((MQTT_RxDataOutPtr[0]==4)&&(MQTT_RxDataOutPtr[1]==0x20)){
// switch(MQTT_RxDataOutPtr[4]){
// case 0x00 : u1_printf("CONNECT±¨Îijɹ¦\r\n"); //´®¿ÚÊä³öÐÅÏ¢
// ConnectPack_flag = 1; //CONNECT±¨Îijɹ¦£¬¶©Ôı¨ÎĿɷ¢
// break; //Ìø³ö·ÖÖ§case 0x00
// case 0x01 : u1_printf("Á¬½ÓÒѾܾø£¬²»Ö§³ÖµÄÐÒé°æ±¾£¬×¼±¸ÖØÆô\r\n"); //´®¿ÚÊä³öÐÅÏ¢
// Connect_flag = 0; //Connect_flagÖÃÁã£¬ÖØÆôÁ¬½Ó
// break; //Ìø³ö·ÖÖ§case 0x01
// case 0x02 : u1_printf("Á¬½ÓÒѾܾø£¬²»ºÏ¸ñµÄ¿Í»§¶Ë±êʶ·û£¬×¼±¸ÖØÆô\r\n"); //´®¿ÚÊä³öÐÅÏ¢
// Connect_flag = 0; //Connect_flagÖÃÁã£¬ÖØÆôÁ¬½Ó
// break; //Ìø³ö·ÖÖ§case 0x02
// case 0x03 : u1_printf("Á¬½ÓÒѾܾø£¬·þÎñ¶Ë²»¿ÉÓã¬×¼±¸ÖØÆô\r\n"); //´®¿ÚÊä³öÐÅÏ¢
// Connect_flag = 0; //Connect_flagÖÃÁã£¬ÖØÆôÁ¬½Ó
// break; //Ìø³ö·ÖÖ§case 0x03
// case 0x04 : u1_printf("Á¬½ÓÒѾܾø£¬ÎÞЧµÄÓû§Ãû»òÃÜÂ룬׼±¸ÖØÆô\r\n"); //´®¿ÚÊä³öÐÅÏ¢
// Connect_flag = 0; //Connect_flagÖÃÁã£¬ÖØÆôÁ¬½Ó
// break; //Ìø³ö·ÖÖ§case 0x04
// case 0x05 : u1_printf("Á¬½ÓÒѾܾø£¬Î´ÊÚȨ£¬×¼±¸ÖØÆô\r\n"); //´®¿ÚÊä³öÐÅÏ¢
// Connect_flag = 0; //Connect_flagÖÃÁã£¬ÖØÆôÁ¬½Ó
// break; //Ìø³ö·ÖÖ§case 0x05
// default : u1_printf("Á¬½ÓÒѾܾø£¬Î´Öª×´Ì¬£¬×¼±¸ÖØÆô\r\n"); //´®¿ÚÊä³öÐÅÏ¢
// Connect_flag = 0; //Connect_flagÖÃÁã£¬ÖØÆôÁ¬½Ó
// break; //Ìø³ö·ÖÖ§case default
// }
ConnectPack_flag = 1;
}
//ifÅжϣ¬Èç¹ûÒ»¹²½ÓÊÕÁË5¸ö×Ö½Ú£¬µÚÒ»¸ö×Ö½ÚÊÇ0x90£¬±íʾÊÕµ½µÄÊÇSUBACK±¨ÎÄ
//½Ó×ÅÎÒÃÇÒªÅж϶©ÔĻظ´£¬¿´¿´ÊDz»Êdzɹ¦
else if((MQTT_RxDataOutPtr[0]==5)&&(MQTT_RxDataOutPtr[1]==0x90)){
switch(MQTT_RxDataOutPtr[5]){
case 0x00 :
case 0x01 : u1_printf("¶©Ôijɹ¦\r\n"); //´®¿ÚÊä³öÐÅÏ¢
SubcribePack_flag = 1; //SubcribePack_flagÖÃ1£¬±íʾ¶©Ôı¨Îijɹ¦£¬ÆäËû±¨ÎĿɷ¢ËÍ
Ping_flag = 0; //Ping_flagÇåÁã
TIM3_ENABLE_30S(); //Æô¶¯30sµÄPING¶¨Ê±Æ÷
LED_DATA_State();
TIM2_ENABLE_10S();
break; //Ìø³ö·ÖÖ§
default : u1_printf("¶©ÔÄʧ°Ü£¬×¼±¸ÖØÆô\r\n"); //´®¿ÚÊä³öÐÅÏ¢
Connect_flag = 0; //Connect_flagÖÃÁã£¬ÖØÆôÁ¬½Ó
break; //Ìø³ö·ÖÖ§
}
}
//ifÅжϣ¬Èç¹ûÒ»¹²½ÓÊÕÁË2¸ö×Ö½Ú£¬µÚÒ»¸ö×Ö½ÚÊÇ0xD0£¬±íʾÊÕµ½µÄÊÇPINGRESP±¨ÎÄ
else if((MQTT_RxDataOutPtr[0]==2)&&(MQTT_RxDataOutPtr[1]==0xD0)){
u1_printf("PING±¨ÎĻظ´\r\n"); //´®¿ÚÊä³öÐÅÏ¢
if(Ping_flag==1){ //Èç¹ûPing_flag=1£¬±íʾµÚÒ»´Î·¢ËÍ
Ping_flag = 0; //ÒªÇå³ýPing_flag±êÖ¾
}else if(Ping_flag>1){ //Èç¹ûPing_flag>1£¬±íʾÊǶà´Î·¢ËÍÁË£¬¶øÇÒÊÇ2s¼ä¸ôµÄ¿ìËÙ·¢ËÍ
Ping_flag = 0; //ÒªÇå³ýPing_flag±êÖ¾
TIM3_ENABLE_30S(); //PING¶¨Ê±Æ÷ÖØ»Ø30sµÄʱ¼ä
}
}
//ifÅжϣ¬Èç¹ûµÚÒ»¸ö×Ö½ÚÊÇ0x30£¬±íʾÊÕµ½µÄÊÇ·þÎñÆ÷·¢À´µÄÍÆËÍÊý¾Ý
//ÎÒÃÇÒªÌáÈ¡¿ØÖÆÃüÁî
else if((MQTT_RxDataOutPtr[1]==0x30)){
u1_printf("·þÎñÆ÷µÈ¼¶0ÍÆËÍ\r\n"); //´®¿ÚÊä³öÐÅÏ¢
// MQTT_DealPushdata_Qs0(MQTT_RxDataOutPtr); //´¦ÀíµÈ¼¶0ÍÆËÍÊý¾Ý
}
MQTT_RxDataOutPtr += BUFF_UNIT; //Ö¸ÕëÏÂÒÆ
if(MQTT_RxDataOutPtr==MQTT_RxDataEndPtr) //Èç¹ûÖ¸Õëµ½»º³åÇøÎ²²¿ÁË
MQTT_RxDataOutPtr = MQTT_RxDataBuf[0]; //Ö¸Õë¹éλµ½»º³åÇø¿ªÍ·
}//´¦Àí½ÓÊÕ»º³åÇøÊý¾ÝµÄelse if·ÖÖ§½áβ
/*-------------------------------------------------------------*/
/* ´¦ÀíÃüÁ³åÇøÊý¾Ý */
/*-------------------------------------------------------------*/
if(MQTT_CMDOutPtr != MQTT_CMDInPtr){ //if³ÉÁ¢µÄ»°£¬ËµÃ÷ÃüÁ³åÇøÓÐÊý¾ÝÁË
MQTT_CMDOutPtr[MQTT_CMDOutPtr[0]+1] = '\0'; //¼ÓÈë×Ö·û´®½áÊø·û
u1_printf("ÃüÁî:%s\r\n",&MQTT_CMDOutPtr[1]); //´®¿ÚÊä³öÐÅÏ¢
if(!memcmp(&MQTT_CMDOutPtr[1],CMD1,strlen(CMD1))){ //ÅжÏÖ¸ÁÈç¹ûÊÇCMD1
LED1_OUT(!LED1_IN_STA); //¿ª¹Ø1״̬·×ª Èç¹ûµãÁÁ¾ÍϨÃ𣬷´Ö®Èç¹ûϨÃð¾ÍµãÁÁ
LED_DATA_State(); //ÅжÏ2·¿ª¹Ø×´Ì¬ºÍ²É¼¯×´Ì¬£¬²¢·¢²¼¸ø·þÎñÆ÷
}else {
u1_printf("δָ֪Áî\r\n");
Connect_flag = 0;
}
MQTT_CMDOutPtr += BUFF_UNIT; //Ö¸ÕëÏÂÒÆ
if(MQTT_CMDOutPtr==MQTT_CMDEndPtr) //Èç¹ûÖ¸Õëµ½»º³åÇøÎ²²¿ÁË
MQTT_CMDOutPtr = MQTT_CMDBuf[0]; //Ö¸Õë¹éλµ½»º³åÇø¿ªÍ·
}//´¦ÀíÃüÁ³åÇøÊý¾ÝµÄelse if·ÖÖ§½áβ
}//Connect_flag=1µÄif·ÖÖ§µÄ½áβ
/*--------------------------------------------------------------------*/
/* Connect_flag=0ͬ·þÎñÆ÷¶Ï¿ªÁËÁ¬½Ó,ÎÒÃÇÒªÖØÆôÁ¬½Ó·þÎñÆ÷ */
/*--------------------------------------------------------------------*/
else{
u1_printf("ÐèÒªÁ¬½Ó·þÎñÆ÷\r\n"); //´®¿ÚÊä³öÐÅÏ¢
TIM_Cmd(TIM4,DISABLE); //¹Ø±ÕTIM4
TIM_Cmd(TIM3,DISABLE); //¹Ø±ÕTIM3
GA6_RxCounter=0; //GA6½ÓÊÕÊý¾ÝÁ¿±äÁ¿ÇåÁã
memset(GA6_RX_BUF,0,GA6_RXBUFF_SIZE); //Çå¿ÕGA6½ÓÊÕ»º³åÇø
if(GA6_Connect_IoTServer()==0){ //Èç¹ûGA6Á¬½ÓÔÆ·þÎñÆ÷º¯Êý·µ»Ø0£¬±íʾÕýÈ·£¬½øÈëif
u1_printf("½¨Á¢TCPÁ¬½Ó³É¹¦\r\n"); //´®¿ÚÊä³öÐÅÏ¢
Connect_flag = 1; //Connect_flagÖÃ1£¬±íʾÁ¬½Ó³É¹¦
GA6_RxCounter=0; //GA6½ÓÊÕÊý¾ÝÁ¿±äÁ¿ÇåÁã
memset(GA6_RX_BUF,0,GA6_RXBUFF_SIZE); //Çå¿ÕGA6½ÓÊÕ»º³åÇø
MQTT_Buff_ReInit(); //ÖØÐ³õʼ»¯·¢ËÍ»º³åÇø
}
}
}
}
/*-------------------------------------------------*/
/*º¯ÊýÃû£ºÅжÏ2·¿ª¹ØºÍ²É¼¯×´Ì¬£¬²¢·¢²¼¸ø·þÎñÆ÷ */
/*²Î Êý£ºÎÞ */
/*·µ»ØÖµ£ºÎÞ */
/*-------------------------------------------------*/
void LED_DATA_State(void)
{
char temp[BUFF_UNIT]; //¶¨ÒåÒ»¸öÁÙʱ»º³åÇø
// sprintf(temp,"{\"method\":\"thing.event.property.post\",\"id\":\"203302322\",\"params\":{\"manger1\":%d,\"manger2\":%d,\"manger3\":%d,\"magner4\":%d},\"version\":\"1.0.0\"}",temper,humd,humd2,senor); //¹¹½¨»Ø¸´Êª¶ÈζÈÊý¾Ý
sprintf(temp,"{\"method\":\"thing.event.property.post\",\"id\":\"203302322\",\"params\":{\"sensor6\":%d,\"sensor7\":%d,\"sensor8\":%d},\"version\":\"1.0.0\"}",weiyi,wendu,yali); //¹¹½¨»Ø¸´Êª¶ÈζÈÊý¾Ý Î»ÒÆ ÎÂ¶È Ñ¹Á¦
MQTT_PublishQs0(P_TOPIC_NAME,temp,strlen(temp)); //Ìí¼ÓÊý¾Ý£¬·¢²¼¸ø·þÎñÆ÷
}
在这段代码中串口发送数据的地方
不知道你这个问题是否已经解决, 如果还没有解决的话:目前这个NB-IoT在国内还是比较火的,最近刚好使用了一款NB-IoT模块。将驱动程序贡献给大家。希望能对用到的朋友有点帮助。
可以在主循环的适当位置添加串口发送数据的代码。具体来说,你可以在从串口读取数据之后,将读取到的数据发送到NB-IoT模块。以下是一个示例代码:
// 初始化串口
void UART_Init()
{
// 串口初始化代码
}
// 主函数
int main()
{
UART_Init(); // 初始化串口
while(1)
{
// 从串口读取数据的代码
char data = UART_Read(); // 假设UART_Read()函数用于从串口读取单个字符
// 这里应该添加串口发送数据的代码
UART_Send(data); // 假设UART_Send(data)函数用于向串口发送单个字符
}
return 0;
}
在这个示例代码中,你需要定义UART_Read()
函数用于从串口读取单个字符,并假设已经实现了UART_Send(data)
函数用于向串口发送单个字符。
请注意,实际的代码可能会因为使用的具体串口库或者操作系统等的不同而有所差异。因此,在实际编写代码时,请参考具体的资料和文档,并根据你所使用的开发环境进行适当的调整和修改。我希望这个解决方案能对你有所帮助!