IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> STM32与Java之间的点灯艺术(一) -> 正文阅读

[移动开发]STM32与Java之间的点灯艺术(一)

项目简介

本人机械专业的,但是却对敲代码有浓厚的兴趣,自学了STM32和Java后,开始整花活了,虽然这个项目可能对大佬的你来说太过简单,但我还是决定将本项目全部开源,帮助初学者吧。全方位点灯,客户端,网页,小程序,App,目前只能网页,暂时先这样。有时间再加其他的。

用到的技术栈

1.STM32标准库编程,ESP8266 AT指令开发
2.Java IO流,JavaFx
3.SpringBoot,SpringMVC,MyBatis
4.Android开发…

正题

Java服务器端

主要负责与ESP8266,客户端之间建立TCP连接,实现客户端与设备之间的信息转发。
在这里插入图片描述

主题思路

在这里插入图片描述

部分代码

 Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    //初始化服务Socket端口
                    ServerSocket serverSocket = new ServerSocket(5000);
                    server_mess.appendText("服务器初始化成功,等待客户端连接\r\n");
                    while (true) {
                        try {
                            //等待客户端连接
                            socket = serverSocket.accept();
                            System.out.println("1111");
                            //设置Socket超时时间
                            socket.setSoTimeout(10000);
                            //获取数据输入流
                            buffreader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                            //读取客户端的第一条信息(判断为客户端还是设备)
                            String clientname = buffreader.readLine();
                            System.out.println(clientname);
                            int clientid = 0;
                            //获取客户端id
                            if ((clientid = ServerUtils.SetClientid(clientMap, clientname)) != 0) {
                                //将当前客户端放入集合
                                clientMap.put(clientid, socket);
                                //获取连接客户端IP
                                String ipaddr = socket.getInetAddress().getHostAddress();
                                //将客户端信息放入列表
                                Platform.runLater(() -> {
                                    ListUtil.AddData(client_list, ipaddr);
                                    client_count += 1;
                                    client_num.setText(String.valueOf(client_count));
                                });
                                server_mess.appendText("客户端" + ipaddr + "已上线" + "id=" + clientid + "\r\n");
                                //为客户端创建一个新的线程
                                ServerThread serverThread = new ServerThread(socket);
                                //开启新的线程
                                serverThread.start();
                            } else
                                throw new IOException();
                    }catch(Exception e){
                         System.out.println("当前不是合法客户端");
                        if (buffreader != null)
                            buffreader.close();
                        if (socket != null)
                            socket.close();
                        e.printStackTrace();
                    }
                }
                } catch (IOException e) {
                    server_mess.appendText("服务器初始化失败,请检查是否占用5000端口\r\n");
                }
            }
        });
        thread.start();
    }

通信协议

通讯协议为自定义协议。

1.上传(设备–>客户端)

起始位ID长度(data字节数)data结束位
0XFD0X??0X??0X?? 0X?? 0x??0xDF
例:0XFD 0X01 0X02 0X00 0X00 0XDF

2.下发(客户端–>设备)

起始位ID长度(data字节数)data结束位
0XFC0X??0X??0X?? 0X?? 0x??0xCF
例:0XFC 0X01 0X02 0X00 0X00 0XCF

STM32代码

int main(void)
{
	SysTick_Init();
	LED_Init();//初始化LED灯
	DHT11_GPIO_Init();//初始化DHT11引脚
	Buzzer_Init();//初始化蜂鸣器引脚
	USART_Config();//初始化串口  
	//初始化ESP8266
	if(!ESP8266_Init()) return false;	
	Buzzer_Tick();//嘀~
	Tim_Init();//定时器初始化
	//向服务器发送说明自己是设备
	ESP8266_TTSendData((uint8_t*)"devide\r\n");   
	while(1)
	{	
		//ESP8266接收到数据
		if(Esp8266_Receive.Receive_FinshFlag == 1)
		{
				Esp8266_Receive.Receive_FinshFlag = 0;
				if(Esp8266_Receive.Receive_Data[0] == 0XFC && Esp8266_Receive.Receive_Data[(Esp8266_Receive.Receive_Data[2] + 3)] == 0XCF)
				{
						if(Esp8266_Receive.Receive_Data[3] == 0X01)
						{
								printf("开灯\r\n");
								LED_Open();
						}else if(Esp8266_Receive.Receive_Data[3] == 0X00)
						{
								printf("关灯\r\n");
								LED_Close();
						}
				}
				Esp8266_Receive.Receive_Length = 0;
				memset(Esp8266_Receive.Receive_Data,0,RECEIVE_MAX_Length);
		}
		if(time_1s)
		{
				time_1s = 0;
				if(DHT11_Read_Dat() == SUCCESS)
				{
						uint8_t ledflag = GPIO_ReadInputDataBit(LED_GPIO_PORT,LED_GPIO_PIN);
						if(ledflag)
							updata[7] = 0X00;
						else
							updata[7] = 0X01;
						updata[3] = DHT11_Data[2];
						updata[4] = DHT11_Data[3];
						updata[5] = DHT11_Data[0];
						updata[6] = DHT11_Data[1];
						ESP8266_TTSendArray(updata,9);
				}
				
		}
	}
}

所有代码

目前只开源了JavaTcp服务器和STM32设备端的代码,看这篇文章的效果,决定是否开源剩余代码。。。。有任何疑问可以加QQ 2452213156一起交流
源码地址
在这里插入图片描述
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-03-08 22:39:08  更:2022-03-08 22:42:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 17:05:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码