找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3787|回复: 2
收起左侧

基于stc8a8k单片机的智能农业系统代码

[复制链接]
ID:512761 发表于 2020-1-22 13:45 | 显示全部楼层 |阅读模式
设计用Stc8板子将温湿度、光照强度等数据通过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. #define uchar unsigned char
  11. #define uint unsigned int
  12. #define  ulint unsigned long int
  13. extern uchar xdata Rec_Buf[Buf_Max];

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

  18. void esp8266();
  19. void Timer0Init(void);
  20. ulint HTTP_PostPkt(char *pkt,uchar *dsid, uchar *val);

  21. uint len=0;
  22. float val_test;
  23. uchar val_ok[5];
  24. char HTTP_Buf[400]="";
  25. uchar g_SEND[400] = " ";

  26. bit flag=0;
  27. uint num=0;

  28. uint ii=0;


  29. //uchar ATCWJAP[]="AT+CWJAP=\"OPPO A59m\",\"12345678\"\r\n";

  30. uchar ATCWJAP[]="AT+CWJAP=\"Netcore\",\"12345678\"\r\n";
  31. uchar ATRST[]="AT+RST\r\n";
  32. uchar ATCIPMUX[]="AT+CIPMUX=0\r\n";
  33. uchar ATCIPMODE[]="AT+CIPMODE=1\r\n";
  34. //uchar ATCIPSTART[]="AT+CIPSTART=\"TCP\",\"192.168.43.126\",5000\r\n";
  35. uchar ATCIPSTART[]="AT+CIPSTART=\"TCP\",\"ip\",80\r\n";
  36. uchar ATCIPSEND[]="AT+CIPSEND\r\n";
  37. uchar ATEXITCIPMODE[]="+++";
  38. uchar POST1[]="POST /devices/579828346/datapoints?type=3 HTTP/1.1\r\n";
  39. uchar POST2[]="api-key:8YGhUHuHNQODlsbk7YrimCE2Qow=\r\n";
  40. uchar POST3[]="Host:api.heclouds.com\r\n";
  41. uchar POST5[]="\r\n";
  42. uchar POST40[]="Content-Length:11\r\n";
  43. uchar POST60[]="{\"temp\":11}";
  44. uchar POST41[]="Content-Length:10\r\n";
  45. uchar POST61[]="{\"wet\":20}";
  46. uchar POST42[]="Content-Length:14\r\n";        
  47. uchar POST62[]="{\"light\":3333}";               
  48. uchar AT[]="AT\r\n";
  49. uchar ATCWMODE[]="AT+CWMODE=1\r\n";
  50. uchar numlist[]={
  51.                                 0x30,
  52.                                 0x31,
  53.                                 0x32,
  54.                                 0x33,
  55.                                 0x34,
  56.                                 0x35,
  57.                                 0x36,
  58.                                 0x37,
  59.                                 0x38,
  60.                                 0x39
  61. };

  62. uchar temp1[3];
  63. uchar humidity1[3];
  64. uchar photo1[4];
  65. uchar tempphoto1;
  66. uchar mnum,count,mark;


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


  69. void tm0()interrupt 1{
  70.         
  71.         ET0=0;
  72.         TH0 = 0xb7;
  73.         TL0 = 0xfe;
  74.         TF0 = 0;

  75.         count ++;
  76.         
  77.         if(count == 50){
  78.            mnum ++;
  79.            
  80.            count = 0;
  81.            //P6 = ~P6;
  82.             
  83.         }
  84.         
  85.         if(mnum==10){

  86.           mark=1;
  87.                
  88.         
  89.                 mnum=0;        
  90.         }
  91.         
  92.    ET0=1;
  93. }


  94. void espdelay(uint z){           //ms延时
  95.         uint x,y;
  96.         for(x = z; x > 0; x--)
  97.                 for(y = 829; y > 0 ; y--);
  98. }

  99. void uart3init(){
  100.         S3CON = 0x50;
  101.         T3H = 0xff;
  102.         T3L = 0xfe;
  103.         T4T3M = 0x08;

  104. }


  105. void uart3send1byte(uchar dat){
  106.         S3BUF = dat;
  107.         while(!(S3CON&0x02));
  108.         S3CON = S3CON | 0xfd;
  109.         espdelay(2);
  110. }

  111. void sendstr(uchar *p){

  112.         while(1)
  113.         {
  114.                 uart3send1byte(*p++);
  115.                 if(*p=='\0') break;
  116.                
  117.         }

  118. }



  119. void send2(unsigned char string){
  120.         
  121.         SBUF = string;
  122.         while(!(SCON&0x02));
  123.         SCON &= ~0x02;
  124.         
  125. }

  126. void sendstr1(uchar *p)
  127. {
  128.         while(1)
  129.         {
  130.                 send2(*p++);
  131.                 if(*p=='\0') break;
  132.         }
  133.         
  134. }

  135. void timer0_init(){
  136.         TMOD = 0x01;
  137.         TH0 = 0xb7;
  138.         TL0 = 0xfe;                 //20ms
  139.         TR0=1;
  140.         ET0 = 1;
  141.         EA = 1;
  142. }

  143.          
  144. int  main(void)

  145. {        P0M1 = 0;
  146.         P0M0 = 0;

  147.         P1M1 = 0;
  148.         P1M0 = 0;

  149.         P2M1 = 0;
  150.         P2M0 = 0;

  151.         P3M1 = 0;
  152.         P3M0 = 0;

  153.         P4M1 = 0;
  154.         P4M0 = 0;
  155.         
  156.         P5M1 = 0;
  157.         P5M0 = 0;

  158.         P6M1 = 0;
  159.         P6M0 = 0;

  160.         P7M1 = 0;
  161.         P7M0 = 0;

  162.         P_SW2=0x02;
  163.           ADC_config();                                 //ADC初始化  
  164.         uart3init();                                  //串口1初始化
  165.         init_1602();                                                                  //1602初始化
  166.         EA = 1;  
  167.         timer0_init();
  168.         Uart_Init();                                  //总中断打开
  169.         delay_ms(10);                                 //初始化后延时
  170. //        WiFi模块初次设置使用
  171.         sendstr(ATRST);
  172.         sendstr(ATCWJAP);
  173.         sendstr(ATCWMODE);
  174.         sendstr(ATCIPMUX);         

  175.         while (1)
  176.         {         
  177.                 displaynumber();
  178.                 DHT11();
  179.                 tempphoto1 = Get_ADC12bitResult();
  180.                 espdelay(5);
  181.                 //将温湿度值转换为字符串
  182.                 temp1[0] =DHT11Value.tempH;
  183.                 temp1[1] =DHT11Value.tempL;
  184.                
  185.                 humidity1[0] = DHT11Value.humyH;
  186.                 humidity1[1] = DHT11Value.humyL;
  187.                 //将光照强度值转换为字符串
  188.                 photo1[0] = tempphoto1/1000;
  189.                 photo1[1] =  (tempphoto1%1000)/100;
  190.                 photo1[2] =  ((tempphoto1%1000)%100)/10;
  191.                 photo1[3] =   ((tempphoto1%1000)%100)%10;

  192.                
  193.                 POST60[8]= numlist[temp1[0]];
  194.                 POST60[9]= numlist[temp1[1]];

  195.                 POST61[7]=numlist[humidity1[0]];
  196.                 POST61[8]=numlist[humidity1[1]];

  197.                 POST62[9]=numlist[photo1[0]];
  198.                 POST62[10]=numlist[photo1[1]];
  199.                 POST62[11]=numlist[photo1[2]];
  200.                 POST62[12]=numlist[photo1[3]];




  201.                 sendstr(ATCIPSTART);

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

  203.         sendstr(ATCIPMODE);

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

  205.         sendstr(ATCIPSEND);

  206.         sendstr1("开始发送数据\r\n");
  207.                         
  208.                
  209.                 sendstr(POST1);
  210.                
  211.                 sendstr(POST2);
  212.                
  213.                 sendstr(POST3);
  214.                
  215.                 sendstr(POST40);
  216.                
  217.                 sendstr(POST5);
  218.                
  219.                 sendstr(POST60);

  220.                
  221.                 sendstr(POST1);
  222.                
  223.                 sendstr(POST2);
  224.                
  225.                 sendstr(POST3);
  226.                
  227.                 sendstr(POST41);
  228.                
  229.                 sendstr(POST5);
  230.                
  231.                 sendstr(POST61);        
  232.                         


  233.                 sendstr(POST1);
  234.                
  235.                 sendstr(POST2);
  236.                
  237.                 sendstr(POST3);
  238.                
  239.                 sendstr(POST42);
  240.                
  241.                 sendstr(POST5);
  242.                
  243.                 sendstr(POST62);
  244.                
  245.         
  246.         
  247.                 espdelay(500);
  248.                
  249.                 sendstr(ATEXITCIPMODE);         
  250.                
  251.                 sendstr1("退出数据发送\r\n");

  252.         }
  253. }
复制代码

所有资料51hei提供下载:
代码.zip (287.79 KB, 下载次数: 42)
回复

使用道具 举报

ID:299519 发表于 2020-2-21 10:42 | 显示全部楼层
机智云?
回复

使用道具 举报

ID:99525 发表于 2022-5-20 18:20 | 显示全部楼层
是谁家的云?免费使用吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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