找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1701|回复: 1
收起左侧

基于单片机WiFi的农田信息采集系统程序,增加电容传感器测土壤湿度

[复制链接]
ID:512761 发表于 2020-4-25 20:07 | 显示全部楼层 |阅读模式
基于WiFi的农田信息采集系统,增加电容传感器测土壤湿度

单片机源程序如下:
  1. #include        "stc8.h"
  2. #include         "stdio.h"
  3. #include        "config.h"
  4. #include        "delay.h"
  5. #include    "uart.h"
  6. #include    "display.h"
  7. #include    "ADC.h"
  8. #include    "DHT11.h"
  9. #include <string.h>
  10. #include "pcf8591_i2c.h"


  11. #define uchar unsigned char
  12. #define uint unsigned int
  13. #define  ulint unsigned long int
  14. //extern uchar xdata Rec_Buf[Buf_Max];

  15. /**********************
  16. 引脚别名定义
  17. ***********************/               
  18. sbit RST = P3^6;     //ESP8266复位引脚用IO口

  19. //uchar ATCWJAP[]="AT+CWJAP=\"OPPO A59m\",\"12345678\"\r\n";
  20. //uchar ATCIPSTART[]="AT+CIPSTART=\"TCP\",\"192.168.2.4\",8888\r\n";//向手机发送数据
  21. //uchar ATCIPSTART[]="AT+CIPSTART=\"TCP\",\"192.168.2.2\",8880\r\n";

  22. uchar AT[]="AT\r\n";

  23. uchar ATRST[]="AT+RST\r\n";
  24. uchar ATCWJAP[]="AT+CWJAP=\"Netcore\",\"18337257016\"\r\n";
  25. uchar ATCWMODE[]="AT+CWMODE=1\r\n";  //设置 Wi-Fi 模式
  26. uchar ATCIPMUX[]="AT+CIPMUX=0\r\n";      //设置多连接模式

  27. uchar ATCIPMODE[]="AT+CIPMODE=1\r\n";   //设置透传模式
  28. uchar ATCIPSTART[]="AT+CIPSTART=\"TCP\",\"183.230.40.33\",80\r\n";
  29. uchar ATCIPSEND[]="AT+CIPSEND\r\n";
  30. uchar ATEXITCIPMODE[]="+++";

  31. uchar POST1[]="POST /devices/579828346/datapoints?type=3 HTTP/1.1\r\n";
  32. uchar POST2[]="api-key:8YGhUHuHNQODlsbk7YrimCE2Qow=\r\n";
  33. uchar POST3[]="Host:api.heclouds点com\r\n";
  34. uchar POST5[]="\r\n";
  35. uchar POST40[]="Content-Length:11\r\n";
  36. uchar POST60[]="{\"temp\":11}";
  37. uchar POST41[]="Content-Length:10\r\n";
  38. uchar POST61[]="{\"wet\":20}";
  39. uchar POST42[]="Content-Length:14\r\n";        
  40. uchar POST62[]="{\"light\":3333}";        
  41. uchar POST43[]="Content-Length:15\r\n";
  42. uchar POST63[]="{\"Soilwet\":201}";        

  43. uchar numlist[]={
  44.                                 0x30,
  45.                                 0x31,
  46.                                 0x32,
  47.                                 0x33,
  48.                                 0x34,
  49.                                 0x35,
  50.                                 0x36,
  51.                                 0x37,
  52.                                 0x38,
  53.                                 0x39
  54. };

  55. uchar temp1[3];
  56. uchar humidity1[3];
  57. uchar photo1[4];
  58. uchar sd[3];
  59. uchar tempphoto1,soilwet;
  60. uchar mnum,count,mark;

  61. uchar gdu[3],sdu[3],gq[5],ts[4];


  62. sbit SDA = P7^6;  /* 数据线 */
  63. sbit SCL = P7^7;  /* 时钟线 */


  64. void tm0()interrupt 1{
  65.         
  66.         ET0=0;
  67.         TH0 = 0xb7;
  68.         TL0 = 0xfe;
  69.         TF0 = 0;

  70.         count ++;
  71.         
  72.         if(count == 50){
  73.            mnum ++;  
  74.            count = 0;
  75.            //P6 = ~P6;
  76.         }
  77.         
  78.         if(mnum==10){
  79.           mark=1;
  80.                 mnum=0;        
  81.         }
  82.         
  83.    ET0=1;
  84. }


  85. void espdelay(uint z){           //ms延时
  86.         uint x,y;
  87.         for(x = z; x > 0; x--)
  88.                 for(y = 829; y > 0 ; y--);
  89. }

  90. void uart3init(){
  91.         S3CON = 0x50;
  92.         T3H = 0xff;
  93.         T3L = 0xfe;
  94.         T4T3M = 0x08;

  95. }

  96. void uart3send1byte(uchar dat){
  97.         S3BUF = dat;
  98.         while(!(S3CON&0x02));
  99.         S3CON = S3CON | 0xfd;
  100.         espdelay(2);
  101. }

  102. void sendstr(uchar *p){
  103.         while(1)
  104.         {
  105.                 uart3send1byte(*p++);
  106.                 if(*p=='\0') break;
  107.                
  108.         }

  109. }


  110. void send2(unsigned char string){
  111.         
  112.         SBUF = string;
  113.         while(!(SCON&0x02));
  114.         SCON &= ~0x02;
  115.         
  116. }

  117. void sendstr1(uchar *p)
  118. {
  119.         while(1)
  120.         {
  121.                 send2(*p++);
  122.                 if(*p=='\0') break;
  123.         }
  124.         
  125. }

  126. void timer0_init(){
  127.         TMOD = 0x01;
  128.         TH0 = 0xb7;
  129.         TL0 = 0xfe;                 //20ms
  130.         TR0=1;
  131.         ET0 = 1;
  132.         EA = 1;
  133. }

  134.          
  135. int  main(void)

  136. {        P0M1 = 0;
  137.         P0M0 = 0;

  138.         P1M1 = 0;
  139.         P1M0 = 0;

  140.         P2M1 = 0;
  141.         P2M0 = 0;

  142.         P3M1 = 0;
  143.         P3M0 = 0;

  144.         P4M1 = 0;
  145.         P4M0 = 0;
  146.         
  147.         P5M1 = 0;
  148.         P5M0 = 0;

  149.         P6M1 = 0;
  150.         P6M0 = 0;

  151.         P7M1 = 0;
  152.         P7M0 = 0;

  153.         P_SW2=0x02;
  154.   ADC_config();                                 //ADC初始化  
  155.         uart3init();                                  //串口3初始化
  156.         init_1602();                                                                  //1602初始化
  157.         EA = 1;  
  158.         timer0_init();
  159.         Uart_Init();                                  //总中断打开
  160.         delay_ms(100);                                 //初始化后延时
  161.         
  162. //        WiFi模块初次设置使用
  163.         sendstr(ATRST);
  164.         sendstr(ATCWJAP);
  165.         sendstr(ATCWMODE);
  166.         sendstr(ATCIPMUX);         

  167.         while (1)
  168.         {         
  169.                 displaynumber();
  170.                 DHT11();
  171.                 tempphoto1 = Get_ADC12bitResult();
  172.                 soilwet =(int)Pcf8591_ReadAD()/51.0*100;
  173.                 espdelay(5);
  174.                 //将温湿度值转换为字符串
  175.                 temp1[0] =DHT11Value.tempH;
  176.                 temp1[1] =DHT11Value.tempL;
  177.                
  178.                 humidity1[0] = DHT11Value.humyH;
  179.                 humidity1[1] = DHT11Value.humyL;
  180.                 //将光照强度值转换为字符串
  181.                 photo1[0] = tempphoto1/1000;
  182.                 photo1[1] =  (tempphoto1%1000)/100;
  183.                 photo1[2] =  ((tempphoto1%1000)%100)/10;
  184.                 photo1[3] =   ((tempphoto1%1000)%100)%10;

  185.                
  186.                 sd[0]=soilwet/100;
  187.                 sd[1]=soilwet%100/10;
  188.                 sd[2]=soilwet%10;
  189.                
  190.                 POST60[8]= numlist[temp1[0]];
  191.                 POST60[9]= numlist[temp1[1]];

  192.                 POST61[7]=numlist[humidity1[0]];
  193.                 POST61[8]=numlist[humidity1[1]];

  194.                 POST62[9]=numlist[photo1[0]];
  195.                 POST62[10]=numlist[photo1[1]];
  196.                 POST62[11]=numlist[photo1[2]];
  197.                 POST62[12]=numlist[photo1[3]];

  198.                 POST63[11]=numlist[sd[0]];
  199.                 POST63[12]=numlist[sd[1]];
  200.                 POST63[13]=numlist[sd[2]];


  201.                 sendstr(ATCIPSTART);

  202.         //sendstr1("已连接到服务器\r\n");

  203.         sendstr(ATCIPMODE);

  204.         //sendstr1("开启透传\r\n");

  205.         sendstr(ATCIPSEND);

  206.         //sendstr1("开始发送数据\r\n");
  207.                         

  208.                 gdu[0]=POST60[8];
  209.                 gdu[1]=POST60[9];
  210.                 gdu[2]='\0';
  211.                 sendstr1("温度:\r\n");
  212.                 sendstr1(gdu);
  213.                 sendstr1("\r\n");
  214.                
  215.                 sendstr(POST1);               
  216.                 sendstr(POST2);               
  217.                 sendstr(POST3);               
  218.                 sendstr(POST40);               
  219.                 sendstr(POST5);               
  220.                 sendstr(POST60);

  221.                
  222.                 sdu[0]=POST61[7];
  223.                 sdu[1]=POST61[8];
  224.                 sdu[2]='\0';
  225.                 sendstr1("湿度:\r\n");
  226.                 sendstr1(sdu);               
  227.                 sendstr1("\r\n");
  228.                
  229.                 sendstr(POST1);               
  230.                 sendstr(POST2);               
  231.                 sendstr(POST3);               
  232.                 sendstr(POST41);               
  233.                 sendstr(POST5);               
  234.                 sendstr(POST61);        
  235.                         

  236.                 gq[0]=POST62[9];
  237.                 gq[1]=POST62[10];
  238.                 gq[2]=POST62[11];
  239.                 gq[3]=POST62[12];
  240.                 gq[4]='\0';
  241.                 sendstr1("光照强度:\r\n");
  242.                 sendstr1(gq);        
  243.                 sendstr1("\r\n");
  244.                         
  245.                 sendstr(POST1);               
  246.                 sendstr(POST2);               
  247.                 sendstr(POST3);               
  248.                 sendstr(POST42);        
  249.                 sendstr(POST5);        
  250.                 sendstr(POST62);
  251.                
  252.                
  253.                 ts[0]=POST63[11];
  254.                 ts[1]=POST63[12];
  255.                 ts[2]=POST63[12];
  256.                 ts[3]='\0';
  257.                 sendstr1("土壤湿度:\r\n");
  258.                 sendstr1(ts);
  259.                 sendstr1("\r\n");
  260.                
  261.                 sendstr(POST1);
  262.                 sendstr(POST2);        
  263.                 sendstr(POST3);        
  264.                 sendstr(POST43);        
  265.                 sendstr(POST5);
  266.                 sendstr(POST63);

  267.                 espdelay(500);
  268.                
  269.                 sendstr(ATEXITCIPMODE);         
  270.                
  271.         //        sendstr1("退出数据发送\r\n");
  272.         
  273.         }
  274. }
复制代码

所有资料51hei提供下载:
代码.7z (69.22 KB, 下载次数: 22)
回复

使用道具 举报

ID:328014 发表于 2020-4-26 01:14 | 显示全部楼层
楼主您好,能上传或者说明一下原理图吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表