最近做设计用到了这个温湿度变送器,自己写的代码以及网上搜集的一些资料进行了统一整理。
image.png
资料包括温湿度变送器说明书,配置测试上位机,以及usb转485驱动,通讯历程(西门子SmartPLC,组态王等)。
此变送器可采用pc软件labview等(需485转usb)进行解析,或单片机串口解析(需485转ttl)以及plc等进行解析数据,本贴采用STM32F1进行解析,其他单片机只需更改串口解析函数即可完成移植。
显示部分采用0.96oled 7针spi 。解析速率可根据需求通过调整发送间隔时间即可。
连接示意图如下:
image.png
结果如图
image.png
程序
#include "sys.h"
  • #include "delay.h"
  • #include "oled.h"
  • #include "bmp.h"
  • #include "led.h"
  • #include "usart.h"        
  • #include "key.h"
  • int main(void)
  • {
  •      SystemInit();
  •      delay_init();
  •      OLED_Init();
  •      LED_Init();
  •      KEY_Init();
  •      USART3_Init(9600);        
  •      Bling(3);                                                
  •      delay_ms(1000);
  •      NVIC_Configuration();
  •     display();
  •   while(1)
  •   {
  •      Ask_temperature_data();
  •      delay_ms(50);
  •      Ask_humidity_data();
  •      delay_ms(1000);
  •   }
  • }
  • /**************接线说明*******************
  • ********显示屏***************************
  • //              GND  电源地
  • //              VCC  3.3v电源
  • //              D0   PC3(SCL)
  • //              D1   PC2(SDA)
  • //              RES  PC1
  • //              DC   PC0
  • //              CS   GND  
  • ********串口******************************
  • **              USART3_TX                                  -->        PB10
  • **              USART3_RX                                  -->        PB11
  • 温湿度变送器解析
  • 温度: °
  • 湿度: %
  • *****************************************/
  • void Ask_temperature_data(void)
  • {
  •   ask_data=1;
  •   USART3_Send(0x01);
  •   USART3_Send(0x03);
  •   USART3_Send(0x00);
  •   USART3_Send(0x01);
  •   USART3_Send(0x00);
  •   USART3_Send(0x01);
  •   USART3_Send(0xD5);
  •   USART3_Send(0xCA);
  • }
  • void Ask_humidity_data(void)
  • {
  •   ask_data=2;
  •   USART3_Send(0x01);
  •   USART3_Send(0x03);
  •   USART3_Send(0x00);
  •   USART3_Send(0x00);
  •   USART3_Send(0x00);
  •   USART3_Send(0x01);
  •   USART3_Send(0x84);
  •   USART3_Send(0x0A);
  • }
  • void display(void)
  • {                        
  •   Draw_Logo1();
  •   write_16_16_CN(0,0,0);    //温
  •   write_16_16_CN(16,0,1);   //湿
  •   write_16_16_CN(32,0,2);   //度
  •   write_16_16_CN(48,0,4);   //变
  •   write_16_16_CN(64,0,5);   //送
  •   write_16_16_CN(80,0,6);   //器
  •   write_16_16_CN(96,0,7);   //解
  •   write_16_16_CN(112,0,8);  //析        
  •   write_16_16_CN(0,3,0);    //温
  •   write_16_16_CN(16,3,2);   //度
  •   LCD_P8x16Str(32,3,":");
  •   write_16_16_CN(0,6,1);    //湿
  •   write_16_16_CN(16,6,2);   //度
  •   LCD_P8x16Str(32,6,":");
  • }
  • 复制代码