최근에 만든 삽입식 항목

3261 단어
지난달에는 전압원 프로젝트를 했고 지난달에는 GJX 모니터링 설비 프로젝트로 이 프로젝트의 실현을 간단하게 기록했다. 사용된 신당의 모 단편기 + GSM 모듈 + 몇 개의 센서는 전체적으로 간단했다. 바로 정시에 데이터를 수집한 다음에 서버에 보고하고 서버 제어 지령을 받아 개발을 제어하는 것이다.유일하게 복잡한 것은 MQTT 프로토콜을 사용하고 인터넷에서 끼워넣는 MQTT 패키지를 찾아서 발송과 수신 부분을 다시 썼다. 원래는 socket을 사용했는데 지금은 socket이 없다. 바로 직렬은 GSM 모듈에서 AT 명령을 보내고 투전으로 설정했다. 기본적으로 OK했다. GSM 모듈은 투전을 사용했기 때문에 단편기가 직렬로 데이터를 잃어버렸다. GSM이 자동으로 서버에 보내는 것이다. MQTT 프로토콜은 한동안 대충 이해했다.내 이해는 바로 응용층의 프로토콜이기 때문에 GSM의 전체 작업 절차도 기본적으로 확정되었다. 먼저 서버에 MQTT 서버를 구축한 다음에 단편기는 직렬 포트에 AT 명령을 보내서 TCP 연결을 구축한다. MQTT 프로토콜 패키지로 직렬 포트에 보내고 직렬 포트로 백업을 감청하면 된다.온도, 습도, 사율 진동, RTC 이런 것들을 조정하고 주류 코드를 붙이는 데 시간이 걸렸다
int main(void)
{
		int ret = -1;
		uint32_t pubtick = 0;
		uint32_t ctltick = 0;
		uint8_t AlarmFlag = 0;
		CheckFlag = 0;
		TimerFlag = 0;
    /* Init System, IP clock and multi-function I/O */
    SYS_Init();
		GpioInit();	
    UART0_Init();
    UART1_Init();
		UART_ENABLE_INT(UART1, (UART_INTEN_RDAIEN_Msk| UART_INTEN_RXTOIEN_Msk));	/*config uart1 interrupt*/
		NVIC_EnableIRQ(UART1_IRQn);
		UART_ENABLE_INT(UART0, (UART_INTEN_RDAIEN_Msk| UART_INTEN_RXTOIEN_Msk));	/*config uart1 interrupt*/
		NVIC_EnableIRQ(UART0_IRQn);
		TMR0_Init();
		TMR1_Init();
		RestGps();
		RestGsm();
    I2C0_Init();
    I2C1_Init();
		Getuid();
//		SetSlope();
		Pver = 20;

//		memset(&CONFIG,0,sizeof(CONFIG));
		CheckWakeFlag();
		SetAccData();
		SetAlarm(0);//rtc 15min
		//GetConfig();
		GetFsuId(FsuId);
		ret = GsmInit();
		if(ret)
		{
			printf("gsminit timeout
"); goto error; } ConnectFlag = 0; Connect: ret = MQTT_Connect(ConnectFlag); if(ret != 0) goto error; ret = MQTT_SubAndPub(); if(ret != 0) goto error; pubtick = gTick1msCnt; while(1) { if(MQTTMsgReceved_proc() == LOGIN_ACK) break; if((YA_GetSysTimeInterval(pubtick) >= 15000))//15 s goto error; } ret = UpdateFsuId(); if(ret) goto Connect; SerializePubMsg(ONLINE); mqtt_publish(PubTopic); pubtick = gTick1msCnt; while(1) { // FeedDog(); if(SendFlag) { SendFlag = 0; // printf("send all data
"); GetAllData(); SerializePubMsg(SEND_CONFIG_DATA); mqtt_publish(PubTopic); AlarmFlag=GetLockState(); } switch(WakeUpFlag) { case 0: PowerDownFlag = 1; break; case 1: #if 0 SerializePubMsg(SEND_ALARM); mqtt_publish(PubTopic); #endif PowerDownFlag = 1; break; case 2: if(TimerFlag) { ctltick = gTick1msCnt; TimerFlag = 0; CheckFlag = 1; } if(CheckFlag) { if((YA_GetSysTimeInterval(ctltick) >= 10000)) { SendFlag = 1; CheckFlag = 0; CheckHaltFlag = 1; break; } } if(CheckHaltFlag) { AlarmFlag=GetLockState(); if(!AlarmFlag) PowerDownFlag = 1; } break; default: break; } MQTTMsgReceved_proc(); // SetWakeAndHalt(AlarmFlag); if(PowerDownFlag||(YA_GetSysTimeInterval(pubtick) >= HaltTime)) { if(WakeUpFlag != 1) SetAccWakeup(); SetAlarm(AlarmFlag); PowerDown(); } } error: SetAccWakeup(); SetAlarm(1); PowerDown(); return 0; }

  
다음으로 전송:https://www.cnblogs.com/yinseyingji/p/8270073.html

좋은 웹페이지 즐겨찾기