在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

聚豐項(xiàng)目 > 歡樂(lè)園丁

歡樂(lè)園丁

歡樂(lè)園丁實(shí)現(xiàn)的是將互聯(lián)網(wǎng)游戲QQ農(nóng)場(chǎng)與物聯(lián)網(wǎng)智能硬件相結(jié)合的產(chǎn)品,實(shí)現(xiàn)智能盆栽養(yǎng)護(hù)管理以及用戶(hù)交互分享相結(jié)合的應(yīng)用模式。

huanzxj huanzxj

分享
1 喜歡這個(gè)項(xiàng)目
團(tuán)隊(duì)介紹

huanzxj huanzxj

團(tuán)隊(duì)成員

周小軍 工程師

分享
項(xiàng)目簡(jiǎn)介
歡樂(lè)園丁實(shí)現(xiàn)的是將互聯(lián)網(wǎng)游戲QQ農(nóng)場(chǎng)與物聯(lián)網(wǎng)智能硬件相結(jié)合的產(chǎn)品,實(shí)現(xiàn)智能盆栽養(yǎng)護(hù)管理以及用戶(hù)交互分享相結(jié)合的應(yīng)用模式。
硬件說(shuō)明

QQ截圖20171129171324.jpg


1、硬件部分組成為:主控MCU-STM32,輔助MCU-MSP430G2553,溫濕度傳感器TSY01,水分傳感模塊Moisture等部分組成;

2、功能說(shuō)明。

1)主控STM32:負(fù)責(zé)傳感數(shù)據(jù)的獲取以及Wifi模組控制,連接到阿里云。用戶(hù)可以從APP端訪問(wèn)數(shù)據(jù),通過(guò)阿里云套件與Wifi模塊3080B交互,進(jìn)而可以控制底端傳感模塊獲取實(shí)時(shí)數(shù)據(jù)。

2)輔助MCU-MSP430G2553:輔助進(jìn)行溫濕度采集數(shù)據(jù),存儲(chǔ),處理,由于數(shù)據(jù)量較大,采用了以前項(xiàng)目中使用的較為成熟的建議變送器模塊;

3)TSYS01:精度可達(dá)到0.01℃的溫濕度傳感器,采集土壤溫濕度數(shù)據(jù);

4)Moisture:水分傳感模塊,實(shí)現(xiàn)水分參數(shù)檢測(cè)。


3、相關(guān)原理圖說(shuō)明。

1)水分傳感模塊原理圖:

QQ截圖20171129172340.jpg

2、TSYS01部分原理圖:

QQ截圖20171129173055.jpg

軟件說(shuō)明

1、430串口通信程序:

#include  "msp430g2553.h"
//#include "12864.h"
#include "uart.h"

#define CPU_F ((double)8000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))

#define uchar unsigned char
//extern int guangzhaozhi,turangzhi;
//uchar cflag=0;
//uchar i1,i2;
//uchar tu[]={0,0,0};
//uchar guang[]={0,0,0,0,0};

void int_port(void)       //初始化I/O口                                    
{ 
  //  P1SEL&=~BIT0;  
  //  P1DIR&=BIT0;
  //  P2SEL&=~(BIT6+BIT7); 
  //  P2DIR&=~(BIT6+BIT0+BIT7);
    P1SEL&=~(BIT6+BIT7);
    P1DIR|=BIT6+BIT7;
 
}
void initurt(void)
{   
  //WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
 // P1DIR = 0xFF;                             // All P1.x outputs
 // P1OUT = 0;                                // All P1.x reset
  //P1OUT|=BIT6;
   P1DIR |= BIT2;
  P1SEL = BIT1 + BIT2 ;                     // P1.1 = RXD, P1.2=TXD
  P1SEL2= BIT1 + BIT2 ;                     // P1.1 = RXD, P1.2=TXD
  UCA0CTL1 |= UCSSEL_2;                     // CLK = ACLK
  UCA0BR0 = 0x41;                           // 32kHz/9600 = 3.41
  UCA0BR1 = 0x03;                           //
  //UCA0MCTL = UCBRS1 + UCBRS0;               // Modulation UCBRSx = 3
  UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
  IE2 |= UCA0RXIE;                          // Enable USCI_A0 RX interrupt
}

// Echo back RXed character, confirm TX buffer is ready first
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
  if(UCA0RXBUF=='c')
  {
    
    
  }
  
  
}

2、溫濕度傳感器數(shù)據(jù)獲取:

#include "msp430g2553.h"
#include "tsys01.h"

#define SCL_H P1OUT |= BIT6      //I2C使用引腳:P1.6(SCL)  P1.7(SDA)	
#define SCL_L P1OUT &= ~BIT6
#define SDA_H P1OUT |= BIT7
#define SDA_L P1OUT &= ~BIT7
#define SDA_IN  P1DIR &= ~BIT7   //SDA改成輸入模式
#define SDA_OUT P1DIR |= BIT7    //SDA變回輸出模式
#define SDA_VAL P1IN&BIT7        //SDA的bit值
#define CPU_F ((double)8000000)  
#define Delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))  
#define Delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)) 
#define _NOP()  __no_operation()
#define DeviceAddress_Write 0xee  //定義器件在IIC總線中的從地址
#define DeviceAddress_Read 0xef  //定義器件在IIC總線中的從地址
#define Reset_cmd 0x1e
#define uchar unsigned char 
#define uint unsigned int                              //ALT  ADDRESS引腳接地時(shí)地址為0xA6,接電源時(shí)地址為0x3A

long ADC24,ADC16;
long k0,k1,k2,k3,k4;
float Temperature=0.0;
double double_ADC16,aa,ADC16_k4,ADC16_k3,ADC16_k2,ADC16_k1,ADC16_k0;
char ack1,ack2;
int t;
uint ge,shi,bai,qian;
void IIC_Start()            //IIC起始信號(hào)
{
  SDA_H;                    //拉高數(shù)據(jù)線
  SCL_H;                    //拉高時(shí)鐘線
  Delay_us(5);                 //延時(shí)
  SDA_L;                    //產(chǎn)生下降沿
  Delay_us(5);//延時(shí)
  SCL_L;                    //拉低時(shí)鐘線
   Delay_us(10);//延時(shí)
}
void IIC_Stop()
{
  SDA_L;                    //拉低數(shù)據(jù)線
  SCL_H;                    //拉高時(shí)鐘線
  Delay_us(5);                //延時(shí)
  SDA_H;                    //產(chǎn)生上升沿
  Delay_us(5);                 //延時(shí)
}

void IIC_SendACK(void)     //主機(jī)發(fā)送應(yīng)答信號(hào)
{
  SDA_L;                   
  _NOP();_NOP();
  SCL_H;                    //拉高時(shí)鐘線
  Delay_us(5);                 //延時(shí)
  SCL_L;                    //拉低時(shí)鐘線
  _NOP();_NOP();
  SDA_H;
  Delay_us(5);                //延時(shí)
}

void mnack(void)           //主機(jī)發(fā)送無(wú)應(yīng)答信號(hào)
{
  SDA_H;
  _NOP(); _NOP();           //空指令延時(shí)
  SCL_H;
  Delay_us(5);
  SCL_L;
  _NOP(); _NOP();           //空指令延時(shí)
  SDA_L;  
  Delay_us(5);     
}

uchar IIC_RecvACK()        //接收應(yīng)答信號(hào)
{
  uchar ack;
 
  SDA_H;
  _NOP(); _NOP();
  SCL_H;
  _NOP(); _NOP();
  SDA_IN;
  Delay_us(5);
  ack = SDA_VAL;   //讀入SDA數(shù)值
  SCL_L;
  Delay_us(5);
  SDA_OUT;
  
  if(ack)    return 0;               //從機(jī)無(wú)應(yīng)答
  else            return  1;         //從機(jī)有應(yīng)答
}

void write1(void)                   //寫(xiě)"1"
{
  SDA_H;
 Delay_us(5);
  SCL_H;
  Delay_us(5);
  SCL_L;    
  Delay_us(5);
}

void write0(void)                  //寫(xiě)"0"
{
  SDA_L;
 Delay_us(5);  
  SCL_H;
  Delay_us(5);  
  SCL_L;    
  Delay_us(5);
}
char IIC_SendByte(unsigned char dat)   //發(fā)送一個(gè)字節(jié)
{
    unsigned char i;
   
    for (i = 0; i < 8; i++)
    {        //8位計(jì)數(shù)器
       if(dat&0x80)
         write1();
       else
         write0();
       dat <<= 1;              //移出數(shù)據(jù)的最高位
    }
    return IIC_RecvACK();
}

unsigned char IIC_RecvByte()        //接收一個(gè)字節(jié)
{
  unsigned char i;
  unsigned char dat = 0,flag;
 
  SDA_H;                     //使能內(nèi)部上拉,準(zhǔn)備讀取數(shù)據(jù),
  for (i = 0; i < 8; i++)
  {       //8位計(jì)數(shù)器
    //SDA_H;
    //Delay5us();
    SCL_H;
    SDA_IN;
    Delay_us(5);
    flag=SDA_VAL;
    dat <<= 1;
    if(flag)
    dat|=0x01;
    SDA_OUT;
    SCL_L;
    Delay_us(5);
  }
  return dat;
}
  
void Reset_tsys01(void)      //tsys01復(fù)位
{
    IIC_Start();                  //起始信號(hào)
    IIC_SendByte(DeviceAddress_Write);   //發(fā)送設(shè)備地址+寫(xiě)信號(hào)
    IIC_SendByte(Reset_cmd);    //內(nèi)部寄存器地址,請(qǐng)參考中文pdf22頁(yè)

    IIC_Stop();                   //發(fā)送停止信號(hào)
 
}

void Read_tsys01_PROM(int cmd,int variable)
{  
    IIC_Start();                          //起始信號(hào)
    IIC_SendByte(DeviceAddress_Write);         //發(fā)送設(shè)備地址+寫(xiě)信號(hào)
    IIC_SendByte(cmd);
    IIC_Stop();
  // Delay_ms(10);
    IIC_Start();                          //起始信號(hào)
    IIC_SendByte(DeviceAddress_Read);         //發(fā)送設(shè)備地址+讀信號(hào)        
    variable = IIC_RecvByte();        
    IIC_SendACK();                //發(fā)送ACK 應(yīng)答
    variable<<=8;
    variable|= IIC_RecvByte();            
    mnack();                        //最后一個(gè)字節(jié)無(wú)應(yīng)答 
    IIC_Stop();   
   Delay_ms(10);
}

void conversion(void)   //啟動(dòng)轉(zhuǎn)換命令
{ 
    IIC_Start();                          //起始信號(hào)
    IIC_SendByte(DeviceAddress_Write);         //發(fā)送設(shè)備地址+寫(xiě)信號(hào)
    IIC_SendByte(0x48);         //轉(zhuǎn)換指令
    IIC_Stop();    
}

void Read_ADC_Result(void)
{
    IIC_Start();                          //起始信號(hào)
    IIC_SendByte(DeviceAddress_Write);         //發(fā)送設(shè)備地址+寫(xiě)信號(hào)
    IIC_SendByte(0x00);         //讀ADC Result指令
    IIC_Stop(); 

    IIC_Start();                          //起始信號(hào)
    IIC_SendByte(DeviceAddress_Read);         //發(fā)送設(shè)備地址+讀信號(hào)
                 
    ADC24 = IIC_RecvByte();        
    IIC_SendACK();                //發(fā)送ACK 應(yīng)答
    ADC24<<=8;
    ADC24|= IIC_RecvByte();         
    IIC_SendACK();
    ADC24<<=8;
    ADC24|= IIC_RecvByte();          //BUF[0]存儲(chǔ)0x32地址中的數(shù)據(jù)
    mnack();                        //最后一個(gè)字節(jié)無(wú)應(yīng)答
    
    IIC_Stop(); 
} 

void tsys01_int(void)
{
    
    Reset_tsys01();       //tsys01復(fù)位
  //  Delay_us(10);
   Delay_ms(10);
    
   Read_tsys01_PROM(0xaa,k0); 
   Read_tsys01_PROM(0xa8,k1); 
   Read_tsys01_PROM(0xa6,k2); 
   Read_tsys01_PROM(0xa4,k3); 
   Read_tsys01_PROM(0xa2,k4); 
   // Delay_ms(10);
}  

void get_data(void)
{
  
    conversion();             //啟動(dòng)轉(zhuǎn)換
    Delay_ms(10);             //轉(zhuǎn)換時(shí)間不超過(guò)9.04ms
    Read_ADC_Result();        //讀取ADC轉(zhuǎn)換結(jié)果
    k0=40781;
    k1=32791;
    k2=36016;
    k3=24926;
    k4=28446;
    ADC16=ADC24/256;
    double_ADC16=ADC16*ADC16*0.000001;
   
    /*代入校準(zhǔn)參數(shù)進(jìn)行計(jì)算*/
    ADC16_k4=-2*k4*0.00001*double_ADC16*0.0001*double_ADC16;
    ADC16_k3=4*k3*0.0000000001*double_ADC16*ADC16;
    ADC16_k2=-2*k2*0.00001*double_ADC16;
    ADC16_k1=k1*0.000001*ADC16;
    ADC16_k0=-1.5*k0*0.01;
    Temperature=ADC16_k4+ADC16_k3+ADC16_k2+ADC16_k1+ADC16_k0;
    
    t=(int)(Temperature*100);
    qian=(int)t/1000;
    bai =t%1000/100;
    shi=t%100/10;
    ge=t%10;
    
    while (!(IFG2&UCA0TXIFG));
    UCA0TXBUF=qian+'0';
    while (!(IFG2&UCA0TXIFG));
    UCA0TXBUF=bai+'0';
    while (!(IFG2&UCA0TXIFG));
    UCA0TXBUF='.';
    while (!(IFG2&UCA0TXIFG));
    UCA0TXBUF=shi+'0';
    while (!(IFG2&UCA0TXIFG));
    UCA0TXBUF=ge+'0';
    
   // while (!(IFG2&UCA0TXIFG));
  //  UCA0TXBUF='C';
    while (!(IFG2&UCA0TXIFG));
    UCA0TXBUF='\n';
}

3、主控程序?yàn)镸bed開(kāi)發(fā),省略;

演示效果

Wifi模塊燒錄boot損壞導(dǎo)致無(wú)法開(kāi)機(jī),聯(lián)系慶科-李博給出了方法,使用J-LINK刷新無(wú)效,確認(rèn)模塊已經(jīng)完全損壞,故無(wú)法提供演示效果。

APP開(kāi)發(fā)未能完成,暫時(shí)只能是上位機(jī)交互模式。

評(píng)論區(qū)(0 )
主站蜘蛛池模板: 伊人电影综合网 | 美女扒开下面让男人捅 | 日本www在线观看 | 婷婷激情电影 | 国产天天在线 | 国产女人伦码一区二区三区不卡 | 国产亚洲欧美日韩俺去了 | 性猛交╳xxx乱大交 性免费视频 | 操美女网址| 在厨房乱子伦在线观看 | 五月综合激情网 | 天天骑天天射 | 日本夜夜操 | 国产福利vr专区精品 | 久久这里只精品热在线8 | 天天躁夜夜躁狠狠躁 | 亚洲综合丁香 | 在线欧美激情 | 夜夜夜操 | 国产人免费人成免费视频 | 美女露出尿囗 | se97se成人亚洲网站 | 女性一级全黄生活片在线播放 | 牛仔裤美女国产精品毛片 | 操熟逼| 色www永久免费视频 色y情视频免费看 | 未满十八18周岁禁止免费国产 | 午夜啪啪网站 | 99久热 | 久久婷婷国产精品香蕉 | 爱操成人网 | 男人天堂伊人 | 首页 亚洲 欧美 制服 丝腿 | 国产精品久久福利网站 | 国产色在线 | 亚洲 国产色综合天天综合网 | 一区一精品 | 四虎黄色片 | 激情综合五月婷婷 | 亚州黄色网址 | 曰本福利写真片视频在线 | 日本网络视频www色高清免费 |