久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
用stc單片機(jī)控制8266WIFI模塊 并啟動BH1750等多個傳感器 回傳數(shù)據(jù)到服務(wù)器
[打印本頁]
作者:
zaza21
時間:
2017-6-10 17:49
標(biāo)題:
用stc單片機(jī)控制8266WIFI模塊 并啟動BH1750等多個傳感器 回傳數(shù)據(jù)到服務(wù)器
/*--------------發(fā)送溫度濕度傳感器數(shù)據(jù)--------*/
/*--------------發(fā)送煙霧傳感器AD數(shù)據(jù)--------*/
/*--------------發(fā)送電壓傳感器AD數(shù)據(jù)--------*/
/*--------------發(fā)送照度傳感器數(shù)據(jù)--------*/
/*--------------發(fā)送振動傳感器數(shù)據(jù)--------*/
控制8266WIFI模塊 讀取多個傳感器數(shù)據(jù) 并通過網(wǎng)絡(luò)進(jìn)行上傳
單片機(jī)源程序如下:
#include "STC12C5A.h" //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義
#include"delay.h"
#include <stdio.h>
#include <intrins.h>
#include "ADC.c"
#include "BH1750.c"
#include "Define.h"
unsigned int ibz;//接收到了多少個字節(jié)
unsigned char Srece_ok=0;
unsigned char Sensor_Data[5]={0x00,0x00,0x00,0x00,0x00};
unsigned char Sensor_Check; //校驗和
unsigned char Sensor_AnswerFlag; //收到起始標(biāo)志位
unsigned char Sensor_ErrorFlag; //讀取傳感器錯誤標(biāo)志
unsigned int Sys_CNT;
unsigned int Tmp;
unsigned char *String;
unsigned char buf[10];//接收數(shù)據(jù)
unsigned char zdjc;
//字符串定義
#define S_Temp "Temp:"
#define S_RH "RH:"
#define S_CRCT "Check: True"
#define S_CRCF "Check: Wrong"
#define S_Data "Data: "
#define S_NotS "Sensor Not Connected"
//sfr AUXR = 0x8E;
sbit Sensor_SDA = P0^0;
/*------------------------------------------------
函數(shù)聲明
------------------------------------------------*/
void SendByte(unsigned char dat);
void SendStr(unsigned char *s);
/*------------------------------------------------
串口初始化
------------------------------------------------*/
void IOINIT(void) //I/O強(qiáng)上拉模式;
{
// P0M1 = 0x00; P0M0 = 0xff; P0=0; //點(diǎn)陣列(Y)(L:OFF; H,H+:ON,ON+;)
P1M1 = B(00000011); P1M0 = B(00000011);P1=1; //(P1@(高阻,IN)&P16@(高阻,IN);TouchKey) ... P14@(傳統(tǒng)IO,Beep,IN) P13@(強(qiáng)推,OUT)呼吸燈 ... P11@(高阻,IN)AD2;P10@(高阻,IN)AD1;
// P2M1 = B(00000000); P2M0 = B(11111111);P2=0; //點(diǎn)陣行(X0(Left))(L:OFF; H,H+:ON,ON+;)
// P3M1 = B(00000000); P3M0 = B(11111111);P3=0; //點(diǎn)陣行(X1(Right))(L:OFF; H,H+:ON,ON+;)
P1ASF =B(00000011); //將P10,P11的IO設(shè)置為模擬輸入功能;
}
void InitUART(void)
{
TMOD = 0x20;
SCON = 0x50;
TH1 = 0xDC;
TL1 = TH1;
PCON = 0x00;
EA = 1; //總中斷
ES = 1; //允許串口中斷
EX0=1; //允許外部中斷0
IT0=1; // 外部中斷0 下降沿觸發(fā)
TR1 = 1;
}
/*------------------------------------------------
發(fā)送一個字節(jié)
------------------------------------------------*/
void SendByte(unsigned char dat)
{
SBUF = dat;
while(!TI);
TI = 0;
}
void Delay_N10us(unsigned char t)
{ unsigned char a;
while(t--)
{
for(a=26;a>0;a--);
}
}
void DelayMs(unsigned int t)
{
while(t--)
{
unsigned char a,b;
for(b=18;b>0;b--)
for(a=152;a>0;a--);
_nop_(); //if Keil,require use intrins.h
}
}
/********************************************\
|* 功能: 串口發(fā)送子函數(shù) *|
\********************************************/
void UART_PutString(unsigned char *buf)
{
while(*buf)
SendByte(*buf++);
}
void UART_PutStringAndNum(unsigned char *buf ,unsigned int num)
{
unsigned char a[3],i;
a[3] = '0'+num%10;
a[2] = '.';
a[1] = '0'+num/10%10;
a[0] = '0'+num/100%10;
while(*buf)
SendByte(*buf++);
SendByte(' ');
for(i=0;i<4;i++)
{
SendByte(a[i]);
}
}
void UART_PutStringAnd_Data(unsigned char *buf ,unsigned char *bufdata)
{
unsigned char a[2],i,j;
while(*buf)
SendByte(*buf++);
SendByte(' ');
for(i=0;i<5;i++)
{
a[0] = bufdata[i]/16;
a[1] = bufdata[i]%16;
for(j=0;j<2;j++)
{
if(a[j]>9)
{
a[j] = (a[j]-10)+'A';
}
else
{
a[j] = a[j]+'0';
}
SendByte(a[j]);
}
//SendByte(' ');
}
}
/********************************************\
|* 功能: 串口發(fā)送傳感器數(shù)據(jù)函數(shù) *|
\********************************************/
void UARTSend_Nbyte(void)
{
if(Sensor_AnswerFlag == 1)
{
Sensor_Check = Sensor_Data[0]+Sensor_Data[1]+Sensor_Data[2]+Sensor_Data[3];
//校驗成功
if(Sensor_Check ==Sensor_Data[4])
{
String = S_RH;//"RH=";
Tmp = Sensor_Data[0]*256+Sensor_Data[1];
UART_PutStringAndNum(String,Tmp);
SendByte(' ');
String = S_Temp;// "Temp=";
Tmp = Sensor_Data[2]*256+Sensor_Data[3];
UART_PutStringAndNum(String,Tmp);
SendByte(' ');
String = S_CRCT;//"Check=True";
UART_PutString(String);
}else //校驗失敗 送上讀到數(shù)據(jù)
{
String = S_Data;//"Data: ";
UART_PutStringAnd_Data(String,Sensor_Data);
SendByte(' ');
String = S_CRCF;//"Check: Wrong";
UART_PutString(String);
}
}// 傳感器未連接
else
{
String = S_NotS; //"Sensor Not Connected";
UART_PutString(String);
}
SendByte(0x0A);
}
void Clear_Data (void)
{
int i;
for(i=0;i<5;i++)
{
Sensor_Data[i] = 0x00;
}//接收數(shù)據(jù)清零
}
/********************************************\
|* 功能: 讀傳感器發(fā)送的單個字節(jié) *|
\********************************************/
unsigned char Read_SensorData(void)
{
unsigned char i,cnt;
unsigned char buffer,tmp;
buffer = 0;
for(i=0;i<8;i++)
{
cnt=0;
while(!Sensor_SDA) //檢測上次低電平是否結(jié)束
{
if(++cnt >= 300)
{
break;
}
}
//延時Min=26us Max50us 跳過數(shù)據(jù)"0" 的高電平
Delay_N10us(2); //延時30us
//判斷傳感器發(fā)送數(shù)據(jù)位
tmp =0;
if(Sensor_SDA)
{
tmp = 1;
}
cnt =0;
while(Sensor_SDA) //等待高電平 結(jié)束
{
if(++cnt >= 200)
{
break;
}
}
buffer <<=1;
buffer |= tmp;
}
return buffer;
}
/********************************************\
|* 功能: 讀傳感器 *|
\********************************************/
unsigned char Read_Sensor(void)
{
unsigned char i;
//主機(jī)拉低(Min=800US Max=20Ms)
Sensor_SDA = 0;
DelayMs(2); //延時2Ms
//釋放總線 延時(Min=30us Max=50us)
Sensor_SDA = 1;
Delay_N10us(1);//延時30us
//主機(jī)設(shè)為輸入 判斷傳感器響應(yīng)信號
Sensor_SDA = 1;
Sensor_AnswerFlag = 0; // 傳感器響應(yīng)標(biāo)志
//判斷從機(jī)是否有低電平響應(yīng)信號 如不響應(yīng)則跳出,響應(yīng)則向下運(yùn)行
if(Sensor_SDA ==0)
{
Sensor_AnswerFlag = 1;//收到起始信號
Sys_CNT = 0;
//判斷從機(jī)是否發(fā)出 80us 的低電平響應(yīng)信號是否結(jié)束
while((!Sensor_SDA))
{
if(++Sys_CNT>300) //防止進(jìn)入死循環(huán)
{
Sensor_ErrorFlag = 1;
return 0;
}
}
Sys_CNT = 0;
//判斷從機(jī)是否發(fā)出 80us 的高電平,如發(fā)出則進(jìn)入數(shù)據(jù)接收狀態(tài)
while((Sensor_SDA))
{
if(++Sys_CNT>300) //防止進(jìn)入死循環(huán)
{
Sensor_ErrorFlag = 1;
return 0;
}
}
// 數(shù)據(jù)接收 傳感器共發(fā)送40位數(shù)據(jù)
// 即5個字節(jié) 高位先送 5個字節(jié)分別為濕度高位 濕度低位 溫度高位 溫度低位 校驗和
// 校驗和為:濕度高位+濕度低位+溫度高位+溫度低位
for(i=0;i<5;i++)
{
Sensor_Data[i] = Read_SensorData();
}
}
else
{
Sensor_AnswerFlag = 0; // 未收到傳感器響應(yīng)
}
return 1;
}
void conversion(uint temp_data) // 數(shù)據(jù)轉(zhuǎn)換出 個,十,百,千,萬
{
Sensor_Data[0]=temp_data/10000+0x30 ;
temp_data=temp_data%10000; //取余運(yùn)算
Sensor_Data[1]=temp_data/1000+0x30 ;
temp_data=temp_data%1000; //取余運(yùn)算
Sensor_Data[2]=temp_data/100+0x30 ;
temp_data=temp_data%100; //取余運(yùn)算
Sensor_Data[3]=temp_data/10+0x30 ;
temp_data=temp_data%10; //取余運(yùn)算
Sensor_Data[4]=temp_data+0x30;
}
/*------------------------------------------------
主函數(shù)
------------------------------------------------*/
void main (void)
{
unsigned int i,b;
unsigned char temp[7];
AUXR = AUXR|0x40; // T1, 1T Mode
IOINIT(); //初始化IO口
InitADC(); //初始化AD轉(zhuǎn)換
Init_BH1750(); //初始化光照傳感器
zdjc=0; //振動檢測位置0;
InitUART(); //串口初始化
DelayMs(8000);
SendStr("AT+CIPMUX=0");
SendByte(0x0d);
SendByte(0x0a);
DelayMs(2000);
while (1)
{
b=getlx();
SendStr("AT+CIPSTART=*TCP*,*192.168.2.107*,8080");
SendByte(0x0d);
SendByte(0x0a);
DelayMs(1000);
/*--------------發(fā)送溫度濕度傳感器數(shù)據(jù)--------*/
SendStr("AT+CIPSEND=61");
SendByte(0x0d);
SendByte(0x0a);
DelayMs(1000);
Clear_Data();
Read_Sensor();
UARTSend_Nbyte();
/*--------------發(fā)送煙霧傳感器AD數(shù)據(jù)--------*/
i=GetADCResult(0);
sprintf(temp," MQ=%04d",i);
SendStr(temp);
/*--------------發(fā)送電壓傳感器AD數(shù)據(jù)--------*/
i=GetADCResult(1);
sprintf(temp," AC=%04d",i);
SendStr(temp);
/*--------------發(fā)送照度傳感器數(shù)據(jù)--------*/
conversion(b);
SendStr(" LX=");
SendStr(Sensor_Data);
/*--------------發(fā)送振動傳感器數(shù)據(jù)--------*/
if(zdjc==1)
{SendStr(" YZD");zdjc=0;}
else{SendStr(" NZD");}
SendByte(0x0d);
SendByte(0x0a);
DelayMs(1000);
// if(Srece_ok==1)
// {
//ES=0;
//sprintf(temp,"AT+CIPSEND=%d",ibz);
//SendStr(temp);
//SendByte(0x0d);
//SendByte(0x0a);
// DelayMs(5000);
//
// for(i=0;i<ibz;i++)
// {
// SendByte(buf[b]);
// b++;
// }
// SendByte(0x0d);
// SendByte(0x0a);
// Srece_ok=0;
// ibz=0;
// b=0;
// ES=1;
// }
}
}
/*------------------------------------------------
發(fā)送一個字符串
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
0.png
(53.28 KB, 下載次數(shù): 142)
下載附件
2017-6-10 18:03 上傳
所有資料51hei提供下載:
傳感器WIFI傳輸.rar
(78.75 KB, 下載次數(shù): 96)
2017-6-10 17:49 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
zhoupengjie123
時間:
2018-1-15 08:21
感謝分享,很有參考價值
作者:
suoguocs
時間:
2022-1-17 09:45
這樣的分享才是真分享
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
五月婷婷网
|
天天做天天爱
|
欧美极品在线
|
一区二区高清
|
欧美一区二区三区在线视频
|
久久艳片www.17c.com
|
日韩av手机在线
|
91午夜精品亚洲一区二区三区
|
新香蕉视频
|
97国产精品
|
99在线视频免费观看
|
三级网站视频
|
九色网址
|
亚洲一区国产
|
精品欧美一区二区精品久久
|
日本不卡在线
|
好吊视频一区二区三区
|
99视频网
|
国内自拍一区
|
久久国产精品99久久人人澡
|
亚洲黄色片
|
国产小视频在线
|
欧美成人综合
|
成人免费视频大全
|
欧美一二区
|
97精品国产97久久久久久免费
|
成人免费视频视频
|
一级肉体裸体bbbb
|
久草福利视频
|
激情五月婷婷综合
|
成人免费视屏
|
欧美操
|
911精品国产一区二区在线
|
五月在线视频
|
色精品
|
亚洲一区二区三区在线视频
|
国产精品毛片av
|
国产乱码一区二区
|
婷婷综合激情
|
亚洲精品1
|
银杏av
|