野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11375|回复: 5

ESP8266与上位机传输数据问题

[复制链接]
发表于 2017-8-29 14:03:16 | 显示全部楼层 |阅读模式
问题描述:各位大佬好!根据官方的野火物联APP控制wifi例程,可以知道APP向STM32发送了命令控制了LED灯。现在我用C#做的一个上位机,能通过wifi连接到板子,但从上位机发送命令CMD_LED_1_1到板子的时候,灯不能亮,而且会返回一串乱码。我疑惑的是1,亮灯命令是否是CMD_LED_x_x  2,返回的乱码来自哪里。已经试过把void ESP8266_StaTcpClient_UnvarnishTest() 里的print语句都注释掉依然还有乱码返回。(代码中文复制粘贴后变乱码,这应该影响不大)
  1. //C#上位机代码
  2. //能够连接不能控制
  3. namespace wincli
  4. {
  5.     public partial class Form1 : Form
  6.     {
  7.         public Form1()
  8.         {
  9.             InitializeComponent();
  10.             Control.CheckForIllegalCrossThreadCalls = false;
  11.         }

  12.         private void textBox2_TextChanged(object sender, EventArgs e)
  13.         {

  14.         }

  15.         TcpClient tcpClient;

  16.         private void button2_Click(object sender, EventArgs e)
  17.         {
  18.             tcpClient = new TcpClient();
  19.             try
  20.             {
  21.                 tcpClient.Connect(this.textBox3.Text, Convert.ToInt32(this.textBox4.Text));
  22.                 this.textBox1.Text = "连接成功— " + DateTime.Now.ToShortTimeString() + "\r\n" +
  23.                 this.textBox1.Text;
  24.                 this.backgroundWorker1.RunWorkerAsync();
  25.             }
  26.             catch (Exception ex)
  27.             {

  28.                 MessageBox.Show("连接失败!"+ex.Message);
  29.             }
  30.         }
  31.         //主线程
  32.         private void button1_Click(object sender, EventArgs e)
  33.         {
  34.             string message = this.textBox2.Text;
  35.             this.textBox1.Text = "发送“"+message+"”" + DateTime.Now.ToShortTimeString() + "\r\n" +
  36.                this.textBox1.Text;
  37.             NetworkStream stream = tcpClient.GetStream();//管道
  38.             byte[] byteArray = Encoding.Unicode.GetBytes(message);//把字符串转换成Byte字节
  39.             stream.Write(byteArray,0,byteArray.Length);//发送字节数组
  40.         }
  41.         //异步
  42.         private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
  43.         {
  44.             NetworkStream stream = tcpClient.GetStream();
  45.             byte[] byteArray = new byte[1024];//暂存接收到的数组
  46.             while (true)
  47.             {
  48.                 int length = stream.Read(byteArray, 0, 1024);//会把流里的字节数组放到byteArray数组中,但后面部分有空,返回一个长度就是客户端内容的字节长度。
  49.                 string receiverMessage = Encoding.Unicode.GetString(byteArray, 0, length);//取出其中的字符串
  50.                 this.textBox1.Text = "接收到:" + receiverMessage + "-" + DateTime.Now.ToShortTimeString() + "\r\n" +
  51.                     this.textBox1.Text;
  52.             }
  53.         }
  54.     }
  55. }
复制代码
  1. void ESP8266_StaTcpClient_UnvarnishTest ( void )
  2. {
  3.         uint8_t ucId, ucLen;
  4.         uint8_t ucLed1Status = 0, ucLed2Status = 0, ucLed3Status = 0, ucBuzzerStatus = 0;

  5.         char cStr [ 100 ] = { 0 }, cCh;

  6.   char * pCh, * pCh1;

  7.         DHT11_Data_TypeDef DHT11_Data;
  8.        

  9.   printf ( "\r\nÕýÔÚÅäÖÃ ESP8266 ......\r\n" );

  10.         macESP8266_CH_ENABLE();
  11.        
  12.         ESP8266_AT_Test ();
  13.        
  14.         ESP8266_Net_Mode_Choose (AP );

  15.   while ( ! ESP8266_CIPAP ( macUser_ESP8266_TcpServer_IP ) );//ģʽѡÔñ

  16.   while ( ! ESP8266_BuildAP ( macUser_ESP8266_BulitApSsid, macUser_ESP8266_BulitApPwd, macUser_ESP8266_BulitApEcn ) );        //Á´½ÓÍⲿwifi
  17.        
  18.         ESP8266_Enable_MultipleId ( ENABLE );
  19.        
  20.         while ( !        ESP8266_StartOrShutServer ( ENABLE, macUser_ESP8266_TcpServer_Port, macUser_ESP8266_TcpServer_OverTime ) );//¿ªÆô·þÎñÆ÷ºÍ¶Ë¿Ú

  21.         ESP8266_Inquire_ApIp ( cStr, 20 );//ap IP address
  22.         printf ( "\r\n±¾Ä£¿éWIFIΪ%s£¬ÃÜÂ뿪·Å\r\nAP IP Ϊ£º%s£¬¿ªÆôµÄ¶Ë¿ÚΪ£º%s\r\nÊÖ»úÍøÂçÖúÊÖÁ¬½Ó¸Ã IP ºÍ¶Ë¿Ú£¬×î¶à¿ÉÁ¬½Ó5¸ö¿Í»§¶Ë\r\n",
  23.            macUser_ESP8266_BulitApSsid, cStr, macUser_ESP8266_TcpServer_Port );
  24.        
  25.        
  26.         strEsp8266_Fram_Record .InfBit .FramLength = 0;
  27.         strEsp8266_Fram_Record .InfBit .FramFinishFlag = 0;       
  28.        
  29.        
  30.        
  31.         while ( 1 )
  32.         {       
  33.                 if ( strEsp8266_Fram_Record .InfBit .FramFinishFlag )
  34.                 {
  35.                         USART_ITConfig ( macESP8266_USARTx, USART_IT_RXNE, DISABLE ); //½ûÓô®¿Ú½ÓÊÕÖжÏ
  36.                         strEsp8266_Fram_Record .Data_RX_BUF [ strEsp8266_Fram_Record .InfBit .FramLength ]  = '\0';
  37.                        
  38.                         printf ( "\r\n%s\r\n", strEsp8266_Fram_Record .Data_RX_BUF );
  39.                         if ( ( pCh = strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "CMD_LED_" ) ) != 0 )
  40.                         {
  41.                                 cCh = * ( pCh + 8 );
  42.                                
  43.                                 switch ( cCh )
  44.                                 {
  45.                                         case '1':
  46.                                                 cCh = * ( pCh + 10 );
  47.                                           switch ( cCh )
  48.                                           {
  49.                                                         case '0':
  50.                                                                 macLED1_OFF ();
  51.                                                           ucLed1Status = 0;
  52.                                                     break;
  53.                                                         case '1':
  54.                                                                 macLED1_ON ();
  55.                                                           ucLed1Status = 1;
  56.                                                     break;
  57.                                                         default :
  58.                                                                 break;
  59.                                                 }
  60.                                                 break;
  61.                                                
  62.                                         case '2':
  63.                                                 cCh = * ( pCh + 10 );
  64.                                           switch ( cCh )
  65.                                           {
  66.                                                         case '0':
  67.                                                                 macLED2_OFF ();
  68.                                                           ucLed2Status = 0;
  69.                                                     break;
  70.                                                         case '1':
  71.                                                                 macLED2_ON ();
  72.                                                           ucLed2Status = 1;
  73.                                                     break;
  74.                                                         default :
  75.                                                                 break;
  76.                                                 }
  77.                                                 break;

  78.                                         case '3':
  79.                                                 cCh = * ( pCh + 10 );
  80.                                           switch ( cCh )
  81.                                           {
  82.                                                         case '0':
  83.                                                                 macLED3_OFF ();
  84.                                                           ucLed3Status = 0;
  85.                                                     break;
  86.                                                         case '1':
  87.                                                                 macLED3_ON ();
  88.                                                           ucLed3Status = 1;
  89.                                                     break;
  90.                                                         default :
  91.                                                                 break;
  92.                                                 }
  93.                                                 break;
  94.                                                
  95.                                   default :
  96.             break;                                       
  97.                                                
  98.                                 }
  99.                                
  100.                         sprintf ( cStr, "CMD_LED_%d_%d_%d_ENDLED_END", ucLed1Status, ucLed2Status, ucLed3Status );
  101.                                
  102.                         }
  103.                        
  104.                         else if ( ( pCh = strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "CMD_BUZZER_" ) ) != 0 )
  105.                         {
  106.                                 cCh = * ( pCh + 11 );
  107.                                
  108.                                 switch ( cCh )
  109.                                 {
  110.                                         case '0':
  111.                                                 macBEEP_OFF ();
  112.                                           ucBuzzerStatus = 0;
  113.                                                 break;
  114.                                         case '1':
  115.                                                 macBEEP_ON ();
  116.                                           ucBuzzerStatus = 1;
  117.                                                 break;
  118.                                         default:
  119.                                                 break;
  120.                                 }
  121.                                
  122.                                 sprintf ( cStr, "CMD_BUZZER_%d_ENDBUZZER_END", ucBuzzerStatus );
  123.                                
  124.                         }
  125.                                
  126.                         else if ( ( ( pCh  = strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "CMD_UART_" ) ) != 0 ) &&
  127.                                         ( ( pCh1 = strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "_ENDUART_END" ) )  != 0 ) )
  128.                         {
  129.                                 if ( pCh < pCh1)
  130.                                 {
  131.                                         ucLen = pCh1 - pCh + 12;
  132.                                         memcpy ( cStr, pCh, ucLen );
  133.                                         cStr [ ucLen ] = '\0';
  134.                                 }
  135.                         }

  136.                         else if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "CMD_READ_ALL_END" ) != 0 )
  137.                         {
  138.                                 DHT11_Read_TempAndHumidity ( & DHT11_Data );
  139.                           sprintf ( cStr, "CMD_LED_%d_%d_%d_ENDLED_DHT11_%d.%d_%d.%d_ENDDHT11_BUZZER_%d_ENDBUZZER_END",
  140.                                                                         ucLed1Status, ucLed2Status, ucLed3Status, DHT11_Data .temp_int,
  141.                                     DHT11_Data .temp_deci, DHT11_Data .humi_int, DHT11_Data .humi_deci,
  142.                   ucBuzzerStatus );
  143.                         }
  144.                        
  145.                                
  146.                         if ( ( pCh = strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "+IPD," ) ) != 0 )
  147.                         {
  148.                                 ucId = * ( pCh + strlen ( "+IPD," ) ) - '0';
  149.                                 ESP8266_SendString ( DISABLE, cStr, strlen ( cStr ), ( ENUM_ID_NO_TypeDef ) ucId );
  150.                         }
  151.                        
  152.                   strEsp8266_Fram_Record .InfBit .FramLength = 0;
  153.             strEsp8266_Fram_Record .InfBit .FramFinishFlag = 0;       
  154.                        
  155.                         USART_ITConfig ( macESP8266_USARTx, USART_IT_RXNE, ENABLE ); //&Ecirc;&sup1;&Auml;&Uuml;&acute;&reg;&iquest;&Uacute;&frac12;&Oacute;&Ecirc;&Otilde;&Ouml;&ETH;&para;&Iuml;
  156.                        
  157.                 }
  158.                
  159.         }
  160.        
  161.                
  162. }


复制代码


1503985143(1).jpg
回复

使用道具 举报

发表于 2017-8-29 14:09:57 | 显示全部楼层
在stm32端打印它接收到的字符串出来看看,按道理CMD_LED_1_1这样是会亮的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-29 23:15:14 | 显示全部楼层
flyleaf 发表于 2017-8-29 14:09
在stm32端打印它接收到的字符串出来看看,按道理CMD_LED_1_1这样是会亮的
  1. int main ( void )
  2. {
  3.        
  4.   USARTx_Config ();
  5.         SysTick_Init ();                                                               
  6.         ESP8266_Init ();                                                               
  7.         DHT11_Init ();
  8.   LED_Init ();
  9.         Beep_Init ();
  10.        
  11.         ESP8266_Cmd (  "AT+CIPMODE=1", "OK", 0, 500 );
  12.         ESP8266_UnvarnishSend ();

  13. //        macBEEP_ON ();
  14. //        Delay_ms(3000);
  15. //        macBEEP_OFF ();
  16.        
  17.   ESP8266_StaTcpClient_UnvarnishTest ();
  18.         printf ( "%s\n",strEsp8266_Fram_Record .Data_RX_BUF );
  19.        
  20.   while ( 1 );

  21. }
复制代码

1504019441(1).jpg
回复 支持 反对

使用道具 举报

发表于 2017-8-30 09:14:37 | 显示全部楼层

没接收到正常数据,你先用 配套的那个有人网络调试助手发字符串来测试下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-30 15:16:15 | 显示全部楼层
随风 发表于 2017-8-30 09:14
没接收到正常数据,你先用 配套的那个有人网络调试助手发字符串来测试下

从网络调试助手输入CMD_LCD_1_1之后,灯也是不亮,乱码可能是在ESP8266_StaTcpClient_UnvarnishTest ()这个函数倒数几行的ESP8266_SendString() 发出,如果是,那就是我发送的命令不符合这个函数前面的判断,直接跳到最后的if语句。。。。

回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-30 18:30:48 | 显示全部楼层
哪里的问题呢?上位机发送的数据不是透明传输的吗?大佬们有什么想法~~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-9-29 17:43 , Processed in 0.075909 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表