基于WiFi的農田信息采集系統,增加電容傳感器測土壤濕度
單片機源程序如下:
- #include "stc8.h"
- #include "stdio.h"
- #include "config.h"
- #include "delay.h"
- #include "uart.h"
- #include "display.h"
- #include "ADC.h"
- #include "DHT11.h"
- #include <string.h>
- #include "pcf8591_i2c.h"
- #define uchar unsigned char
- #define uint unsigned int
- #define ulint unsigned long int
- //extern uchar xdata Rec_Buf[Buf_Max];
- /**********************
- 引腳別名定義
- ***********************/
- sbit RST = P3^6; //ESP8266復位引腳用IO口
- //uchar ATCWJAP[]="AT+CWJAP=\"OPPO A59m\",\"12345678\"\r\n";
- //uchar ATCIPSTART[]="AT+CIPSTART=\"TCP\",\"192.168.2.4\",8888\r\n";//向手機發送數據
- //uchar ATCIPSTART[]="AT+CIPSTART=\"TCP\",\"192.168.2.2\",8880\r\n";
- uchar AT[]="AT\r\n";
- uchar ATRST[]="AT+RST\r\n";
- uchar ATCWJAP[]="AT+CWJAP=\"Netcore\",\"18337257016\"\r\n";
- uchar ATCWMODE[]="AT+CWMODE=1\r\n"; //設置 Wi-Fi 模式
- uchar ATCIPMUX[]="AT+CIPMUX=0\r\n"; //設置多連接模式
- uchar ATCIPMODE[]="AT+CIPMODE=1\r\n"; //設置透傳模式
- uchar ATCIPSTART[]="AT+CIPSTART=\"TCP\",\"183.230.40.33\",80\r\n";
- uchar ATCIPSEND[]="AT+CIPSEND\r\n";
- uchar ATEXITCIPMODE[]="+++";
- uchar POST1[]="POST /devices/579828346/datapoints?type=3 HTTP/1.1\r\n";
- uchar POST2[]="api-key:8YGhUHuHNQODlsbk7YrimCE2Qow=\r\n";
- uchar POST3[]="Host:api.heclouds點com\r\n";
- uchar POST5[]="\r\n";
- uchar POST40[]="Content-Length:11\r\n";
- uchar POST60[]="{\"temp\":11}";
- uchar POST41[]="Content-Length:10\r\n";
- uchar POST61[]="{\"wet\":20}";
- uchar POST42[]="Content-Length:14\r\n";
- uchar POST62[]="{\"light\":3333}";
- uchar POST43[]="Content-Length:15\r\n";
- uchar POST63[]="{\"Soilwet\":201}";
- uchar numlist[]={
- 0x30,
- 0x31,
- 0x32,
- 0x33,
- 0x34,
- 0x35,
- 0x36,
- 0x37,
- 0x38,
- 0x39
- };
- uchar temp1[3];
- uchar humidity1[3];
- uchar photo1[4];
- uchar sd[3];
- uchar tempphoto1,soilwet;
- uchar mnum,count,mark;
- uchar gdu[3],sdu[3],gq[5],ts[4];
- sbit SDA = P7^6; /* 數據線 */
- sbit SCL = P7^7; /* 時鐘線 */
- void tm0()interrupt 1{
-
- ET0=0;
- TH0 = 0xb7;
- TL0 = 0xfe;
- TF0 = 0;
- count ++;
-
- if(count == 50){
- mnum ++;
- count = 0;
- //P6 = ~P6;
- }
-
- if(mnum==10){
- mark=1;
- mnum=0;
- }
-
- ET0=1;
- }
- void espdelay(uint z){ //ms延時
- uint x,y;
- for(x = z; x > 0; x--)
- for(y = 829; y > 0 ; y--);
- }
- void uart3init(){
- S3CON = 0x50;
- T3H = 0xff;
- T3L = 0xfe;
- T4T3M = 0x08;
- }
- void uart3send1byte(uchar dat){
- S3BUF = dat;
- while(!(S3CON&0x02));
- S3CON = S3CON | 0xfd;
- espdelay(2);
- }
- void sendstr(uchar *p){
- while(1)
- {
- uart3send1byte(*p++);
- if(*p=='\0') break;
-
- }
- }
- void send2(unsigned char string){
-
- SBUF = string;
- while(!(SCON&0x02));
- SCON &= ~0x02;
-
- }
- void sendstr1(uchar *p)
- {
- while(1)
- {
- send2(*p++);
- if(*p=='\0') break;
- }
-
- }
- void timer0_init(){
- TMOD = 0x01;
- TH0 = 0xb7;
- TL0 = 0xfe; //20ms
- TR0=1;
- ET0 = 1;
- EA = 1;
- }
-
- int main(void)
- { P0M1 = 0;
- P0M0 = 0;
- P1M1 = 0;
- P1M0 = 0;
- P2M1 = 0;
- P2M0 = 0;
- P3M1 = 0;
- P3M0 = 0;
- P4M1 = 0;
- P4M0 = 0;
-
- P5M1 = 0;
- P5M0 = 0;
- P6M1 = 0;
- P6M0 = 0;
- P7M1 = 0;
- P7M0 = 0;
- P_SW2=0x02;
- ADC_config(); //ADC初始化
- uart3init(); //串口3初始化
- init_1602(); //1602初始化
- EA = 1;
- timer0_init();
- Uart_Init(); //總中斷打開
- delay_ms(100); //初始化后延時
-
- // WiFi模塊初次設置使用
- sendstr(ATRST);
- sendstr(ATCWJAP);
- sendstr(ATCWMODE);
- sendstr(ATCIPMUX);
- while (1)
- {
- displaynumber();
- DHT11();
- tempphoto1 = Get_ADC12bitResult();
- soilwet =(int)Pcf8591_ReadAD()/51.0*100;
- espdelay(5);
- //將溫濕度值轉換為字符串
- temp1[0] =DHT11Value.tempH;
- temp1[1] =DHT11Value.tempL;
-
- humidity1[0] = DHT11Value.humyH;
- humidity1[1] = DHT11Value.humyL;
- //將光照強度值轉換為字符串
- photo1[0] = tempphoto1/1000;
- photo1[1] = (tempphoto1%1000)/100;
- photo1[2] = ((tempphoto1%1000)%100)/10;
- photo1[3] = ((tempphoto1%1000)%100)%10;
-
- sd[0]=soilwet/100;
- sd[1]=soilwet%100/10;
- sd[2]=soilwet%10;
-
- POST60[8]= numlist[temp1[0]];
- POST60[9]= numlist[temp1[1]];
- POST61[7]=numlist[humidity1[0]];
- POST61[8]=numlist[humidity1[1]];
- POST62[9]=numlist[photo1[0]];
- POST62[10]=numlist[photo1[1]];
- POST62[11]=numlist[photo1[2]];
- POST62[12]=numlist[photo1[3]];
- POST63[11]=numlist[sd[0]];
- POST63[12]=numlist[sd[1]];
- POST63[13]=numlist[sd[2]];
- sendstr(ATCIPSTART);
- //sendstr1("已連接到服務器\r\n");
- sendstr(ATCIPMODE);
- //sendstr1("開啟透傳\r\n");
- sendstr(ATCIPSEND);
- //sendstr1("開始發送數據\r\n");
-
- gdu[0]=POST60[8];
- gdu[1]=POST60[9];
- gdu[2]='\0';
- sendstr1("溫度:\r\n");
- sendstr1(gdu);
- sendstr1("\r\n");
-
- sendstr(POST1);
- sendstr(POST2);
- sendstr(POST3);
- sendstr(POST40);
- sendstr(POST5);
- sendstr(POST60);
-
- sdu[0]=POST61[7];
- sdu[1]=POST61[8];
- sdu[2]='\0';
- sendstr1("濕度:\r\n");
- sendstr1(sdu);
- sendstr1("\r\n");
-
- sendstr(POST1);
- sendstr(POST2);
- sendstr(POST3);
- sendstr(POST41);
- sendstr(POST5);
- sendstr(POST61);
-
- gq[0]=POST62[9];
- gq[1]=POST62[10];
- gq[2]=POST62[11];
- gq[3]=POST62[12];
- gq[4]='\0';
- sendstr1("光照強度:\r\n");
- sendstr1(gq);
- sendstr1("\r\n");
-
- sendstr(POST1);
- sendstr(POST2);
- sendstr(POST3);
- sendstr(POST42);
- sendstr(POST5);
- sendstr(POST62);
-
-
- ts[0]=POST63[11];
- ts[1]=POST63[12];
- ts[2]=POST63[12];
- ts[3]='\0';
- sendstr1("土壤濕度:\r\n");
- sendstr1(ts);
- sendstr1("\r\n");
-
- sendstr(POST1);
- sendstr(POST2);
- sendstr(POST3);
- sendstr(POST43);
- sendstr(POST5);
- sendstr(POST63);
- espdelay(500);
-
- sendstr(ATEXITCIPMODE);
-
- // sendstr1("退出數據發送\r\n");
-
- }
- }
復制代碼
所有資料51hei提供下載:
代碼.7z
(69.22 KB, 下載次數: 22)
2020-4-25 20:25 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|