ESP8266和msp430g2553的实践项目

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u010194274/article/details/50126823

在调ESP8266的时候出了点问题,然而技术文档只写了很基本的东西。我们使用UDP广播的形式发送数据,但是指令集里面没有提到这个,导致查了很久的错才发现问题。

在使用UDP广播的时候,AT+CIPSTART=0,“UDP”,"255.255.255.255",1000,5000,1(PS:里面的5000是端口号,其他参数都是固定的)。同时,这个模块每次断电再上电就得设置下这两句话。AT+CIPMUX=1;AT+CIPSTART=0,“UDP”,"255.255.255.255",1000,5000,1。所以串口发送这两个字符串,发送的时候双引号使用转义字符\",而结尾记得发送\n\r,\n为回车,缓冲区的内容会发出来,\r为换行,这个是格式要求,跟配置蓝牙的AT指令要求一致。

下面是我做的一个项目的程序


#include "msp430g2553.h"
#define CPU_F ((double)1000000)
#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 OUT_1 P2OUT|=BIT2;
#define OUT_0 P2OUT&=~BIT2;
#define red_time 40
#define green_time 60
#define cycle 100
#define uchar unsigned char
char str[13];
int i=0;
void timer_init();
void uart0_init();
void send_byte(uchar byte);
void send_string(uchar *string);
void ESP_init();
void code_1();
void code_0();
void start();
void end();
void red_light();//红灯设置为7位数据加一位校验码(偶校验),00000000
void green_light();//绿灯设置为7位数据加一位校验码(偶校验),00000011
void normal();//正常的红绿灯,红灯40s,绿灯60s
char flag=0;
int mode=0;//设置电脑控制还是手动控制
int time=0;
int main( void )
{
  WDTCTL = WDTPW + WDTHOLD;
  BCSCTL1=CALBC1_1MHZ;
  DCOCTL=CALDCO_1MHZ;//dcoclk为1M
  BCSCTL1|=SELM0;//MCLK选择XT1,SMCLK为dcoclk
  P2DIR|=BIT1+BIT2;
  P2SEL|=BIT1;//P2.1为38k输出
  P1DIR|=BIT0+BIT6;//测试用
  P1OUT&=~BIT0+(~BIT6);
  uart0_init();//串口初始化
  timer_init();//定时器初始化
  ESP_init();
  _EINT();
   while(1)
   {
     if(mode==1) {red_light();P1OUT|=BIT6;}
     else P1OUT&=~BIT6;
     if(mode==2) {green_light();P1OUT|=BIT0;}
     else P1OUT&=~BIT0;
     if(mode==0) normal();
     
   }
}
void timer_init()//TA1做38k方波产生,记一次数1us
{
TACTL=TASSEL_1+MC_1+ID_3;
CCR0=50000-1;
CCTL0=CCIE;//TA0
TA1CTL|=TASSEL_2+MC_1+TACLR;
TA1CCR0=26;
TA1CCTL1=OUTMOD_6;
TA1CCR1=13;//TA1.1
}
void uart0_init()
{
 P1SEL = BIT1 + BIT2; //1.1为rxd,1.2为txd
 P1SEL2 = BIT1 + BIT2;
 UCA0CTL1 |= UCSSEL_2; 
 UCA0BR0 = 8;
 UCA0BR1 = 0;
 UCA0MCTL = UCBRS2 + UCBRS0; 
 UCA0CTL1 &= ~UCSWRST; 
 IE2 |= UCA0RXIE;
}
void ESP_init()
{
 send_string("AT\r\n");//\n为回车,遇到回车时将缓冲区内容发出,\r为换行,格式要求
 delay_ms(100);
 send_string("AT+CIPMUX=1\r\n");
 delay_ms(100);
 send_string("AT+CIPSTART=0,\"UDP\",\"255.255.255.255\",1000,5002,1\r\n");
 delay_ms(100);
}
void code_1()//260us低电平和260us高电平
{
  OUT_0;
  delay_us(260);
  OUT_1;
  delay_us(260);
}
void code_0()//520us低电平和260us高电平
{
  OUT_0;
  delay_us(520);
  OUT_1;
  delay_us(260); 
}
void start()//520us高电平
{
  OUT_1;
  delay_us(520);
}
void end()//260us低电平
{
  OUT_0;
  delay_us(260);
}
void red_light()
{ 
  int i;
  start();
  for(i=0;i<8;i++)
    code_0();
  end();
}
void green_light()
{ 
  int i;
  start();
  for(i=0;i<6;i++)
    code_0();
  code_1();
  code_1();
  end();
}
void normal()
{
 if(time

展开阅读全文

没有更多推荐了,返回首页