标题:
基于单片机WiFi的农田信息采集系统程序,增加电容传感器测土壤湿度
[打印本页]
作者:
真-小白
时间:
2020-4-25 20:07
标题:
基于单片机WiFi的农田信息采集系统程序,增加电容传感器测土壤湿度
基于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
作者:
51hei团团
时间:
2020-4-26 01:14
楼主您好,能上传或者说明一下原理图吗?
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1