求arduino与串口屏通信的代码

求arduino与串口屏通信的代码,第1张

首先是串口的读入: 基本的串口读入: void setup() { Serialbegin(9600); //设置波特率为9600,一般是这个波特率 } void loop() { if(Serialavailable()>0)//如果串口有数据进入的话 { char c=Serialread();//每次读一个字符,是ASCII码的 } } 然后就是相当于读入信息的处理了 比如说如果建一个字符串name,每读一次c若不是等号或空格就加进去, 当读到等号时就读完一个名字了,接下来一直读到空格的都是数据, 当读到空格后就完成一个循环,继续上面的循环这样

如何将鼠标的移动信息(x位置,y位置)发送给Arduino?
我自己做了小车,想用光电鼠标实时反馈位置信息。结果就是实现不了鼠标芯片和Arduino之间的通讯。
自己编了程序,大家帮着看看问题出在哪里?
/ communication
between Mouse and Arduino
/
#include <ps2h>
PS2 mouse(8, 9); //设置针脚
void setup()
{
Serialbegin(9600);
mousewrite();
mouseread();
}
void loop()
{
unsigned char code;
code = mousewrite();
code = mouseread();
Serialprintln(code); //读取键盘输入并输出到串口显示
}
/
ps2cpp
/
#include "ps2h"
PS2::PS2(int clk, int data) //初始化,设置时钟和数据位的针脚
{
_ps2clk = clk;
_ps2data = data;
}
unsigned char PS2::write()
{
unsigned char data = 0x00;
unsigned char i;
unsigned char bit = 0x01;
pinMode(_ps2clk, OUTPUT);
digitalWrite(_ps2clk, LOW);
delayMicroseconds(240);
pinMode(_ps2data, INPUT);
digitalWrite(_ps2data, LOW); //以上把时钟和数据均设置为低位,以使鼠标产生时序信号
delayMicroseconds(20);
digitalWrite(_ps2clk, HIGH);
for(i=0;i<11;i++)//发送11位数据
{
while (digitalRead(_ps2clk) == HIGH)
{;}//延时等待时钟线信号变低
Serialprintln(data);
if((data&0x01)==1) //获取要发送的数据位
{digitalWrite(_ps2data, HIGH);} //发送数据的第i位值到数据线
else
{digitalWrite(_ps2data, LOW);}
data = data>>1;
while (digitalRead(_ps2clk) == LOW)
{;}//延时等待时钟拉高
}
pinMode(_ps2clk, INPUT);
digitalWrite(_ps2clk, LOW); //全部读取完毕,将时钟设为低位
return data;
}
unsigned char PS2::read(void)
// 读取数据模块,返回8位数据
{
unsigned int value=0; //将value作为接收缓冲区
unsigned char i;
digitalWrite(_ps2clk, HIGH); //arduino释放数据线
for (i=0;i<11;i++) //接收11bit数据
{ value=value>>1;
while(digitalRead(_ps2clk) == HIGH){;}//延时等待到时钟为低
delay(4);//延时50 微秒
if(digitalRead(_ps2data)==HIGH)
{value=value|0x0400;}//读数据线的值并记录在value
while(digitalRead(_ps2clk) == LOW){;}//延时等待到时钟为高
}
value>>=1;//截取value的2-11位
return value;
} //返回 *** 作数据
/
ps2h
/
#include "Arduinoh"
class PS2
{
public:
PS2(int clk, int data);
unsigned char read(void);
unsigned char write(void);
private:
int _ps2clk;
int _ps2data;
};

有很多通信模块只有TCP功能,没有MQTT功能,比如WIFI,W5500等模块,还有一些NBIOT模块,但是又想连接阿里云物联网平台,官方提供了 *** 作系统,需要自己移植,很麻烦,比较难看得懂。就在想有没有一些简单一定的方法。
心想MQTT是基于TCP的,能否使用TCP转MQTT?因此就想使用TCP协议然后转MQTT协议连接阿里云物联网平台,经过试验证明是可以的。
首先我们先分析一下如何登陆接入Onenet平台。
先从它数据格式开始分析。首先我们要从后台取出三个信息,我们以这个为例。
我们把产品ID,设备名称,设备秘钥,简称三要素 (具体是什么看你自己的设备)
其实阿里云物联网平台的MQTT协议用的就是标准的,不过它加入了自己的认证方式。
MQTT协议需要上传四个参数,报活时间,clientID,用户名,密码。
那么阿里云的就在clientID,用户名,密码做了手脚。
clientID比较长,按照一定的格式
用户名:设备名和秘钥组成
密码:使用了加密串进行了加密,有sha1或者MD5加密方式
下面我们来介绍一下
MQTT接入都是发十六进制的数据。
么我们发送的时候就是这样子的一串数据
0x74 0x00 0x04 0x4d 0x51 0x54 0x54 0x04 0xC0 0078 0033 0x61 0x62 0x63 0x7c 0x73 0x65 0x63 0x75 0x72 0x65 0x6d 0x6f 0x64 0x65 0x3d 0x33 0x2c 0x73 0x69 0x67
0x6e 0x6d 0x65 0x74 0x68 0x6f 0x64 0x3d 0x68 0x6d 0x61 0x63 0x73 0x68 0x61 0x31 0x2c 0x74 0x69 0x6d 0x65 0x73 0x74 0x61 0x6d 0x70 0x3d 0x31 0x32 0x30 0x7c 0009
0x35 0x36 0x37 0x38 0x26 0x31 0x32 0x33 0x34 0028 0x32 0x32 0x32 0x37 0x35 0x30 0x44 0x45 0x44 0x46 0x45 0x34 0x46 0x37 0x37 0x34 0x30 0x30 0x32 0x45 0x45 0x38 0x37 0x45 0x45 0x44 0x32 0x39 0x43 0x46 0x44 0x30 0x36 0x33 0x38 0x43 0x35 0x46 0x36 0x36
十六进制解释
数据长度:0x74
协议数据长度 0x00 0x04
协议类型: 0x4d 0x51 0x54 0x54
协议数据: 0x04 0xC0
keepAlive数据:0078
ClientID长度:0033
ClientID: 0x61 0x62 0x63 0x7c 0x73 0x65 0x63 0x75 0x72 0x65 0x6d 0x6f 0x64 0x65 0x3d 0x33 0x2c 0x73 0x69 0x67 0x6e 0x6d 0x65 0x74 0x68 0x6f 0x64 0x3d 0x68 0x6d 0x61 0x63 0x73 0x68 0x61 0x31 0x2c 0x74 0x69 0x6d 0x65 0x73 0x74 0x61 0x6d 0x70 0x3d 0x31 0x32 0x30 0x7c
用户名:0009
用户名: 0x35 0x36 0x37 0x38 0x26 0x31 0x32 0x33 0x34
密码长度:0028
密码: 0x32 0x32 0x32 0x37 0x35 0x30 0x44 0x45 0x44 0x46 0x45 0x34 0x46 0x37 0x37 0x34 0x30 0x30 0x32 0x45 0x45 0x38 0x37 0x45 0x45 0x44 0x32 0x39 0x43 0x46 0x44 0x30 0x36 0x33 0x38 0x43 0x35 0x46 0x36 0x36复制代码上面的就是连接服务器的连接包
下面呢,我们来做个发布包(上传数据到服务器)
0x30 0x1D 0009 2f7379732f706f7374 0x7b 0x70 0x61 0x72 0x61 0x6d 0x73 0x3a 0x7b 0x74 0x65 0x6d 0x70 0x3a 0x31 0x30 0x7d 0x7d
十六进制数据解释
数据头:0x30
数据长度:0x1D
TopicName数据长度:0009
TopicName数据内容:2f7379732f706f7374
主体json数据: 0x7b 0x70 0x61 0x72 0x61 0x6d 0x73 0x3a 0x7b 0x74 0x65 0x6d 0x70 0x3a 0x31 0x30 0x7d 0x7d复制代码以上就是连接阿里云的数据包格式及发布数据的格式,由于时间问题没有做订阅的数据包分析,下一次更新订阅的内容。

串口通讯是靠DIO(直接输入/输出)和CLK1(bit时钟),CLK2(BYTE时钟)进行的
比如arduino要传一段英文到stm32
arduino端:
通过shitOut指令传出,传出一次CLK2高电平脉冲一次
stm32端:
初始化引脚
循环检测DIO角是否有信号
有就记录,每次记录一次位移一次,以CLK1脉冲一次为一个跳变结束,以CLK2脉冲为一个字节结束
配上数组就可以实现字符串发送接受

在这里问是浪费自己的时间,因为在这里要说明白实在是太耗费时间了。
请根据你手头的WIFI模块,然后百度关键字:arduino XXWIFI。
网上有各种玩家写的帖子,提供了各种姿势玩它们的记录。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10616839.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-10
下一篇2023-05-10

发表评论

登录后才能评论

评论列表(0条)

    保存