|
ESP8266和msp430g2553的实践项目
[复制链接]
在调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
|
|