[应用相关] 9-ESP8266 SDK开发基础入门篇--编写串口上位机软件

[复制链接]
 楼主| characteristic 发表于 2020-8-15 16:49 | 显示全部楼层 |阅读模式
 楼主| characteristic 发表于 2020-8-15 16:49 | 显示全部楼层
 楼主| characteristic 发表于 2020-8-15 16:50 | 显示全部楼层
现在看串口发送数据

点击点亮 发送0xaa 0x55 0x01   
451515f37a1caaace9.png
 楼主| characteristic 发表于 2020-8-15 16:51 | 显示全部楼层
我电脑上安装了虚拟串口软件,虚拟出来了COM1和COM2,然后COM1发送的数据会发给COM2  COM2发送的数据会发给COM1

大家如果有两个串口模块也可以
734605f37a1e406be6.png
347515f37a1ee28794.png
https://jingyan.baidu.com/article/e3c78d648965303c4c85f535.html
 楼主| characteristic 发表于 2020-8-15 16:51 | 显示全部楼层
那个按钮的程序这样写
396045f37a21a001aa.png
296035f37a22189514.png
 楼主| characteristic 发表于 2020-8-15 16:52 | 显示全部楼层
测试一下
555945f37a23594825.png
 楼主| characteristic 发表于 2020-8-15 16:52 | 显示全部楼层
现在看串口接收数据
136995f37a2528ddfe.png
59505f37a25987f46.png
 楼主| characteristic 发表于 2020-8-15 16:53 | 显示全部楼层
说一下哈,这个是上位机的串口中断函数,就是只要接收到数据就会进入这个中断

现在咱读出来接收的数据,然后显示在
627195f37a273ca829.png
 楼主| characteristic 发表于 2020-8-15 16:53 | 显示全部楼层
读取数据给了好几个方法

咱就说1个,哈哈哈,其实自己一选择方法的时候就有中文注释......
488395f37a2946c464.png
 楼主| characteristic 发表于 2020-8-15 16:54 | 显示全部楼层
大家注没注意
54125f37a2afea521.png
 楼主| characteristic 发表于 2020-8-15 16:55 | 显示全部楼层
现在调用一个函数读出来,然后显示出来
976815f37a2dc45afb.png
ReadExisting()   这个方法就会返回缓冲区里面的所有字节,注意返回的是字符串形式的
 楼主| characteristic 发表于 2020-8-15 16:55 | 显示全部楼层
调用这个方法就是  serialPort1.ReadExisting();       serialPort1就是咱的
834025f37a30199423.png
因为咱就是要里面的数据所以  

string str = serialPort1.ReadExisting();//读出来当前缓存里面的所有数据
 楼主| characteristic 发表于 2020-8-15 16:56 | 显示全部楼层
Invoke((new Action(() =>

{

    这里面放要操作的主线程的控件的方法

})));
 楼主| characteristic 发表于 2020-8-15 16:57 | 显示全部楼层
其实这个方法主要是方便解决一个问题,稍候再说,咱先测试一下哈
218695f37a33e4baea.png
 楼主| characteristic 发表于 2020-8-15 16:58 | 显示全部楼层
说明可以了,现在呢,咱去掉
177585f37a38fe9acb.png
800625f37a397033f6.png
478435f37a39ea825c.png
 楼主| characteristic 发表于 2020-8-15 16:58 | 显示全部楼层
大家可以点开那个  如何跨线程调用 Windows 窗体控件

大家可以看这个https://www.cnblogs.com/yangfengwu/p/5761841.html(最好别看,看了就会感觉麻烦)

4.0之后引进了这种方法

315075f37a3c312a60.png
 楼主| characteristic 发表于 2020-8-15 16:59 | 显示全部楼层
对于初学者知道这个就可以了,像C#,C++,JAVA等等这种高级语言哈,因为可以做界面了,,高级语言规定,操作页面不能在子线程中进行

哪些是子线程呢!..像上面那个串口中断函数,还有自己创建的任务Thread,,,等等吧

 楼主| characteristic 发表于 2020-8-15 17:00 | 显示全部楼层
好现在,咱接收16进制,

接收到

0xaa 0x55 0x01  
616455f37a40001da1.png

0xaa 0x55 0x00  
510115f37a41240b15.png
 楼主| characteristic 发表于 2020-8-15 17:00 | 显示全部楼层
好,上菜

//串口接收到数据就会进入privatevoidserialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)

        {

            intlen = serialPort1.BytesToRead;//获取可以读取的字节数if(len >0)

            {

                byte[] recvBytes =newbyte[len];//创建接收的数组serialPort1.Read(recvBytes,0, len);//接收数据if(recvBytes[0] ==0xaa&& recvBytes[1] ==0x55)//判断数据                {

                    if(recvBytes[2] ==0x01)//                    {

                        Invoke((newAction(() =>                        {

                            button3.Text ="熄灭";

                            label5.Text ="点亮";

                        })));

                    }

                    elseif(recvBytes[2] ==0x00)

                    {

                        Invoke((newAction(() =>                        {

                            button3.Text ="点亮";

                            label5.Text ="熄灭";

                        })));

                    }

                }

            }

            //string str = serialPort1.ReadExisting();//读出来当前缓存里面的所有数据

            //Invoke((new Action(() =>

            //{

            ////显示在文本框里面

            //    textBox1.AppendText(str);

            //})));}
 楼主| characteristic 发表于 2020-8-15 17:01 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

367

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部