这个挺简单的, 你只需要在电脑上创建一个serverSocket 然后客户端去连接这个socket, 连接成功以后就可以收发数据了
CPU与外设之间数据传送都是通过内存实现的。
外围设备和内存之间的常用数据传送控制方式有四种
(1)程序直接控制方式:就是由用户进程直接控制内存或CPU和外围设备之间的信息传送。这种方式控制者都是用户进程。
(2)中断控制方式:被用来控制外围设备和内存与CPU之间的数据传送。这种方式要求CPU与设备(或控制器)之间有相应的中断请求线,而且在设备控制器的控制状态寄存器的相应的中断允许位。
(3)DMA方式:又称直接存取方式。其基本思想是在外围设备和内存之间开辟直接的数据交换通道。
(4)通道方式:与DMA方式相类似,也是一种以内存为中心,实现设备和内存直接交换数据的控制方式。与之不同的是,在DMA方式中数据传送方向、存放数据内存始址以及传送的数据块长度等都是由CPU控制,而在通道方式中这些都是由专管输入输出的硬件——通道来进行控制。
你说的android是指android系统的手机吧,那要跟他联系的话就得在两者之间建立通信,首先android手机没有支持ZigBee的,我的方案是:ZigBee的很多节点的数据传给ZigBee终端,再由ZigBee终端通过WIFI模块(亦或蓝牙模块)传递数据给android上位机。
以前用过HC05/HC06这样的,单片机与蓝牙模块之间的通信是串口通信。
信息转换是Android上层客户端与STM32底层控制通信的关键,Android上层客户端无法直接通过串口和底层STM32进行通信。而且在串口通信中,很容易出现数据的丢失。且是非握手的协议,即发送端不知道接收端是否收到发送的信息。
技术实现要素:
本发明的目的是:解决Android上层客户端无法直接通过串口和底层STM32进行通信的技术问题。
本发明提供了一种Android上层客户端与STM32底层通信方法,来实现上层通过串口和底层进行通信,包括以下步骤:
步骤S100:Android上层客户端向STM32底层传送信息;包括以下子步骤:步骤S110:使用USB转RS232连接线将微型USB接口连接平板USB接口,用于平板供电和数据传输;普通USB接口接5v电源,为FTID模块和平板供电;RS232接口输出或接受RS232串口数据信息;步骤S120:RS232通用串口信息经过RS232电平转TTL电平模块,其中,采用max232芯片实现电平转换,最终被转换成TTL信息;步骤S130:TTL信息被底层STM32接收。
步骤S200:STM32底层向Android上层客户端传送信息;包括以下子步骤:步骤S210:STM32底层通过各种传感器采集信息;步骤S220:采集到的信息经过TTL转RS232模块转换成RS232通用串口信息进行传输;其中,采用max232芯片实现电平转换;步骤S230:传输的信息经过解码显示在安卓上层客户端。
本发明的另一个目的是:解决串口之间数据传输易丢失的问题。
优选的,该方法所传送的信息数据采用符号#,标记数据终止。
优选的,该方法所传送的信息数据采用符号$,标记数据开始。
本发明提供了一种模拟握手协议的数据传输格式,使得数据的传输更加可靠。
有益效果:本发明实现了Android上层客户端与STM32底层控制通信的信息转换,有效地解决了上层与底层不能直接通信的问题,而且较为实用,简单;同时通信中采用的数据传输格式,模拟了握手协议,使得传输更加的可靠。
附图说明
图1为本发明实施例提供的基于Android上层客户端与STM32底层通信方法的系统结构示意图。
图2为本发明实施例提供的Android上层客户端与STM32底层通信方法的数据包发送格式。
具体实施方式
为使本发明解决的技术问题、采用的技术方案和达到的技术效果更加清楚,下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部内容。
本实施例是将Android上层客户端与STM32底层通信方法用于传感器数据传送。首先连接在STM32F103主控板上的各种传感器采集数据,经过主控板进行数据处理之后,通过无线串口模块发送数据到PC端。
PC端运行一个JAVA程序,程序定义串口接口,当无线数传开始工作后,串口就会打开,java程序就能接收来自串口的数据。接收到来自串口的数据后,程序通过Socket和安卓客户端连接上,打开输出流。再对接收到的数据进行处理和分发。处理时,进行数据解析,每一种数据都与相应的输出流对应,通过该输出流传输到安卓客户端。并且在Eclipse控制台输出接受的数据以检测是否传输出错。
之后打开安卓客户端,客户通过socket套接字和电脑相连,可以互相通信。客户端连上服务器后,接收来自服务器端的数据并作出相应判断和处理。客户端定义了5个线程,用来接受和处理不同种类的数据。同时将数据存储到数据库。
具体过程如下:请参照图1,安卓上层客户端与STM32底层控制通信,是通过STM32底层控制—电脑服务器端—安卓客户端实现的。这一模式实现较为方便,传输数据可靠。
STM32底层通过传感器获得环境的相关参数,其中包括温度、心率、湿度、烟雾浓度、是否摔倒等数据。然后将电脑和STM32底层控制通过无线数传连接,这些数据通过无线数传传到电脑串口上,等待电脑服务器端的接收。这些数据按照自定义的格式来传输。格式为“$No,data#”。No为0,表示湿度。No为1表示心率,No为2表示温度,No为3表示烟雾浓度,No为4表示是否摔倒。
电脑服务器端是用Ecl ipse写的Java程序。程序定义串口接口,当无线数传开始工作后,串口就会打开,java程序就能接收来自串口的数据。接收到来自串口的数据后,程序通过Socket和安卓客户端连接上,打开输出流。再对接收到的数据进行处理和分发。处理时,进行数据解析,每一种数据都与相应的输出流对应,通过该输出流传输到安卓客户端。并且在Eclipse控制台输出接受的数据以检测是否传输出错。
安卓客户端主要是用来提醒用户并向用户提供实时环境信息的。客户通过socket套接字和电脑相连,可以互相通信。客户端连上服务器后,就可接收来自服务器端的数据并作出相应判断和处理。客户端定义了5个线程,用来接受和处理不同种类的数据。客户端每个界面都有相应环境参数的正常范围值和相关介绍。种类0环境湿度、种类2环境温度,如果温湿度在正常范围,则用默认黑体字显示当前环境湿度。若不在正常的范围,则用红色字体提示用户注意。种类1是心率,若在正常范围,则用默认黑体字显示当前心率,弱不在正常范围,则用红字字体显示当前心率,并且提示是过高还是过低。过高则建议休息,过低则建议去检查身体。而且这些数据和发生的准确时间将会存储到数据库。种类3是烟雾浓度,若不正常,则讲烟雾浓度和时间记录到数据库,以便检查是否有过烟雾异常。种类4判断是否摔倒。若摔倒,则手机震动提示用户,而且将摔倒时间存储到数据库。这样一来,不仅能够实时显示当前环境状况,又能查询是否有过异常,如心跳、摔倒等,主要针对年轻人方便检查老年人一段时间内的异常状况。
图2中的数据格式为“$No,data#”。No为0,表示湿度。No为1表示心率,No为2表示温度,No为3表示烟雾浓度,No为4表示是否摔倒,整个通信过程,采用此数据格式来进行数据传输。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。STM32作为主控芯片,ESP8266作为外设,利用串口传递信息,通过机智云平台实现STM32与手机之间的数据传输!之所以选择机智云平台,是因为机智云平台相关配套的软件工具非常齐全,而且和正点合作,按照原子哥的精神推出有详细的基于STM32的教程,非常适合对云服务的认知处于一脸懵的人对其进行初步的探索STM32板子和ESP8266模块必不可少,下载机智云的DEMO APP,链接:机智云DEMO APP
(2)ESP8266的固件,链接:GAgent for ESP8266 04020034
(3)串口调试工具,链接:机智云串口调试助手 for win7\win8\win10 v2.3.5
(4)使用MCU代码自动生成工具,自动生成MCU代码,使用方法链接:MCU代码生成工具介绍
(5)这个链接包含乐鑫官方烧录工具,机智云串口调试工具,ESP8266固件,以及原子哥详细的机智云教程的PDF资料;提取码为:txs8:工具
步骤有四:
(1)注册机智云,创建新产品,使用MCU代码生成工具自动生成代码;
(2)刷ESP8266固件,并在机智云的串口助手上进行调试;
(3)将生成的代码移植到自己的工程;
(4)联网,调试;
1、创建产品,生成代码
1.1 创建产品简介
创建产品的过程中要弄明白几个关键要素之间的关系,Product Key,Product Secret,以及数据点所包含的内容!
首先Product Key和Product Secret可以理解为你所创建产品的登录账号和密码,后面自动生成的代码会把这个写进协议里面,这样的话后期把程序烧录进MCU入网之后,手机会通过这个获取你所创建的产品信息!
接下来以最简单的控制LED为例!
比如:实现的目标既可以在MCU开发板控制三个LED的亮灭,又可以在手机上控制,而且在开发板上控制时手机上可以显示当前LED的亮灭状态!那么你可以创建一个产品,然后产品里面有三个数据点!这三个数据点就是指这三个LED!然后三个LED中每一个又包含“亮”“灭”两种状态!
这里的产品就像是用MDK写STM32点亮发光二极管的时候要建立的工程类似!然后因为三个LED有且只有两种状态所以我们设置的数据包类型为布尔值!然后我们希望手机端和开发板上都可以控制所以数据读写类型设置为可写!
不能。
Android系统需要百兆以上的处理器和数十兆的RAM空间。标准Linux需要处理器具有MMU(存储器管理单元)。STM32满足不了这两点要求,所以STM32上是无法跑Android的。
STM32是M系列,属于低成本设计,不带MMU控制器,不可能运行Linuxuc,μClinux不算Linux的。因此基于STM平台且满足实时控制要求操作系统,只有以下5种可供移植选择。分别为μClinux、μC/OS-II、eCos、FreeRTOS和rt-thread。
扩展资料:
STM32L 系列产品基于超低功耗的 ARM Cortex-M4处理器内核,采用意法半导体独有的两大节能技术:130nm 专用低泄漏电流制造工艺和优化的节能架构,提供业界领先的节能性能。
该系列属于意法半导体阵容强大的 32 位 STM32 微控制器产品家族,该产品家族共有 200余款产品,全系列产品共用大部分引脚、软件和外设,优异的兼容性为开发人员带来最大的设计灵活性。
STM32F0 系列产品基于超低功耗的 ARM Cortex-M0 处理器内核,整合增强的技术和功能,瞄准超低成本预算的应用。该系列微控制器缩短了采用 8 位和 16 位微控制器的设备与采用 32 位微控制器的设备之间的性能差距,能够在经济型用户终端产品上实现先进且复杂的功能。
参考资料来源:百度百科-stm32
本文标签:stm32与安卓端的信息交互