要做一个偏远地区的物联网控制应用,考虑了多种通信方式,据我所知总共也就这几种:有线,WIFI,GPRS。其余的什么MQTT,XBEE,RFID等等也离不开网络,或者可以这样设计:用RFID做设备间信息传输,然后部署一台另外的设备负责把最终信息存储设备的信息通过网络发送到服务端,这样能减少一些联网设备,不过感觉意义不大。
首先是第一个坑 ,现在arduino gprs设备几乎都是使用的2G通信,而运营商的2G通道渐渐都关闭了,会伴随着速度缓慢,信号丢失,无反应等各种情况,所以有时候写出来程序调试半天发现是通信的问题,直接让人怀疑选型gprs是个错误,这时候就要在通信程序中加入各种判断,考虑各种情况,工作量大幅上升。
去V2EX发帖吐槽,总结了网友给出消息:摩拜单车锁用的通信方式是移动定制的4G物联网流量卡,公路上的抓拍摄像头使用的是有线连接,自动货物出售机普遍采用4G物联网卡,远洋船舶通信是卫星信号,流量费贵出天际。总之GPRS通信处于被淘汰的边缘了。
应该有人问,那为什么不选4G?一个字:“穷”,arduino官方有支持2G/3G/4G的模块,一个将近900元,在硬件领域,有时候1分钱都要比较,不是斤斤计较,因为大量的设备意味着造价数量级的升高,同样能给出解决方案,老板肯定会选择报价低的。自己做?我反正做不出。
第二个坑 ,arduino gprs通信模块便宜的有A6,SIM800,SIM900,这些模块发送一个>
这里我们使用了一个库: PubSubClient
创建产品
创建新设备
(1) 产品ID, 用户ID,和登录key
(2) 设备名称, ID和 设备key
OneNet MQTTS用携带token的方式进行鉴权
访问者(可以为应用或者设备)固化访问密钥于软件中,在需要进行服务访问时,通过密钥计算临时token,通过临时token进行服务访问认证
访问者首先通过访问管理者获取临时访问token,访问管理者可根据需要自定义该token的访问有效期(即过期时间),访问者获取该token后方才能访问OneNET
访问管理者直接将密钥授权给访问者(例如,直接为设备烧写key),访问者通过密钥生成token进行访问
计算方法: >
Arduino和树莓派不是一类控制器。可以说,Arduino是控制器,而树莓派是计算机。
优点:Arduino使用更简单,通过一点编程,就能实现很好玩的东西,比如做个手机之类的。
当然Arduino还便宜、功耗低。
但是树莓派是一个计算机,运行 *** 作系统,完全可以像使用电脑一样使用它。这就是树莓派的厉害之处了,就是他更强大,可以运行更多程序,可以完成强度更大的运算。
比如:如果给你一个摄像头,Arduino可以获取图像并通过网络发布出来,但是树莓派可以检测画面有没有动,当有人出现的时候告诉你。这就是计算机的强大之处。
如何将鼠标的移动信息(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;
};
Arduino开发板管理器是一种用于管理Arduino开发板的工具,它可以帮助您更轻松地编程和管理Arduino开发板。它可以帮助您更轻松地编写代码,更快地调试程序,更方便地上传代码,更容易地更新固件,更容易地查看和管理Arduino开发板,以及更容易地访问Arduino社区资源。它还可以帮助您更轻松地与其他开发者分享代码,并且可以让您更容易地从Arduino开发板中获取有用的信息。
这个 MAC 是你可以自己设定的 是你自己输入就行 byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; 能自己更改里面的内容值 他是16进位制
Arduino硬件的特点主要包括以下几个方面:
1 开放源代码:Arduino硬件的设计方案和软件代码都是开放源代码的,可以自由获取、使用和修改,方便用户进行二次开发和定制。
2 易于使用:Arduino的硬件和软件都非常易于使用,即使对于没有硬件和编程经验的初学者来说,也可以快速上手。
3 多种型号:Arduino硬件有多种不同的型号和版本,适用于不同的应用场景和开发需求。例如Arduino Uno、Arduino Mega、Arduino Nano等。
4 低成本:Arduino硬件的成本相对较低,适合用于学习、教育和小规模项目开发。
5 丰富的资源和社区支持:Arduino硬件有大量的在线资源和社区支持,包括教程、示例代码、开发工具、应用案例等,方便用户进行学习和开发。
6 多种接口:Arduino硬件具有多种接口,包括数字输入/输出接口、模拟输入接口、串口、I2C总线、SPI总线、PWM输出等,可以方便地与其他外围设备进行通信和控制。
总之,Arduino硬件的特点包括开放源代码、易于使用、多种型号、低成本、丰富的资源和社区支持、多种接口等,使得它成为了一个非常受欢迎的开放式硬件平台。
以上就是关于Arduino GPRS模块的一些坑全部的内容,包括:Arduino GPRS模块的一些坑、arduino遥控怎么匹配、玩转 ESP32 + Arduino (十三) 通过MQTTs协议上传数据至OneNet云平台等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)