Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SIM800C #3

Open
techiall opened this issue Mar 23, 2018 · 5 comments
Open

SIM800C #3

techiall opened this issue Mar 23, 2018 · 5 comments
Labels

Comments

@techiall
Copy link
Owner

在某宝上买了 SIM800C 开发板(店家记得给我广告费),这样子就不需要自己焊板子了,233

里面店铺还给了相关的资料,动手难度不大。https://pan.baidu.com/s/1b01Wrc

还需要一张卡,买那种 物联卡 就行了,卡放在模块里面前,先要插入手机,激活后才可以使用。注意模块 SIM 插槽的方向,有坑。

USB-TTL 调试

需要 USB-TTL,连线如下

SIM800C - USB-TTL

GND - GND

VCC - 5.0V (3.3V 也是可以的,没什么问题)

R - RXD

T - TXD

SSCOM 软件波特率选择 9600,记得勾选回车换行。

虽然说 SIM800C 自动识别波特率,但是发现选择其他波特率的时候不够稳定。若通过 Arduino Uno 连接,使用 115200 波特率不够稳定,发送 AT 指令后,模块返回数值时会出现乱码,因此才选择使用 9600。

在提供的资料里面,算是很全面了。包括 AT 指令。使用 SIM800C 模块进行 TCP/IP 连接服务器。相关指令。具体参考资料里面的文档 SIM800系列_TCPIP_应用文档_V1.01.pdf

AT+CPIN?
AT+CSQ
AT+CREG?
AT+CGATT?
AT+CSTT="CMNET"
AT+CIICR
AT+CIFSR
AT+CIPSTART="TCP","test.com","8500"
AT+CIPSEND

连接 Arduino Uno

连接方式,参考链接:http://www.ayomaonline.com/programming/quickstart-sim800-sim800l-with-arduino/

  • SIM800 5v/4v ↔ Arduino 5v
  • SIM800 GND (either one) ↔ Arduino GND
  • SIM800 SIM_TXD ↔ Arduino D8 (read through for the reason)
  • SIM800 SIM_RXD ↔ Arduino D7 (read through for the reason)

代码

#include <SoftwareSerial.h>
 
//SIM800 TX is connected to Arduino D8
#define SIM800_TX_PIN 8
 
//SIM800 RX is connected to Arduino D7
#define SIM800_RX_PIN 7
 
//Create software serial object to communicate with SIM800
SoftwareSerial serialSIM800(SIM800_TX_PIN,SIM800_RX_PIN);
 
void setup() {
  //Begin serial comunication with Arduino and Arduino IDE (Serial Monitor)
  Serial.begin(9600);
  while(!Serial);
   
  //Being serial communication witj Arduino and SIM800
  serialSIM800.begin(9600);
  delay(1000);
   
  Serial.println("Setup Complete!");
}
 
void loop() {
  //Read SIM800 output (if available) and print it in Arduino IDE Serial Monitor
  if(serialSIM800.available()){
    Serial.write(serialSIM800.read());
  }
  //Read Arduino IDE Serial Monitor inputs (if available) and send them to SIM800
  if(Serial.available()){    
    serialSIM800.write(Serial.read());
  }
}

SIM800C AT 指令集成库

在网上找了这个这个硬件的封装库,发现只找到和他类似的,然后就下载来用,后来出了一些问题,看了下实现的源码,发现有些和我使用不符,而且实现起来不是很难,因此自己就写了一个,只写了 HTTP 发送数据。

附上链接 https://github.com/techial1042/SIM800C_Arduino

@wanglegang
Copy link

你好,有没有示例程序,如何调用封装库里面的函数,和如何定义ip地址和端口号?谢谢

@techiall
Copy link
Owner Author

你好,有没有示例程序,如何调用封装库里面的函数,和如何定义ip地址和端口号?谢谢

封装库的函数,其实也就是封装了 AT 指令,你可以参考 SIM800C 通讯的过程,这样子你应该就可以理解了。

至于你说的 IP 和 PORT,我的理解是:服务器的IP地址和端口?

使用这个函数即可,当然你需要保证模块先初始化好。

// 创建 TCP 链接
bool create_tcp(const char *ip, unsigned int port);

该函数等同于 AT+CIPSTART="TCP","IP","POST" 这条 AT 指令。

@wanglegang
Copy link

wanglegang commented Feb 29, 2020 via email

@techiall
Copy link
Owner Author

techiall commented Mar 1, 2020

techial您好,很高兴收到您的回信:
我想:
1:在程序里调用您的封装库里面的函数,以调用at指令.
2:在程序里面定义ip地址和端口号.
#include <SoftwareSerial.h>
#include "SIM800C.h"
//SIM800 TX is connected to Arduino D8
#define SIM800_TX_PIN 8

//SIM800 RX is connected to Arduino D7
#define SIM800_RX_PIN 7

//Create software serial object to communicate with SIM800
SoftwareSerial serialSIM800(SIM800_TX_PIN,SIM800_RX_PIN);

const char *ip[ ] = "192.168.1.100";
unsigned int port =8000;

void setup() {
//Begin serial comunication with Arduino and Arduino IDE (Serial Monitor)
Serial.begin(9600);
while(!Serial);

//Being serial communication witj Arduino and SIM800
serialSIM800.begin(9600);
delay(1000);

Serial.println("Setup Complete!");
serialSIM800.println("Setup Complete serialSIM800!");
SIM800C.init();
delay(1000);
SIM800C.restart();
delay(1000);
}

void loop() {
//Read SIM800 output (if available) and print it in Arduino IDE Serial Monitor
if(serialSIM800.available()){
Serial.write(serialSIM800.read());
}
//Read Arduino IDE Serial Monitor inputs (if available) and send them to SIM800
if(Serial.available()){
serialSIM800.write(Serial.read());
}
}

先引入头文件

#include "SIM800C.h"

接着定义一个实例,和一些常量。

SIM800C sim(7, 8, 9600); // TX, RX
const char *ip = "ip"; // ip address
const unsigned int port = 8080; // port

SIM800C 初始化

	sim.restart();
	delay(2000);
	sim.multi_link_mode(false);
	delay(2000);
	sim.init();
	delay(1000);
	sim.apn();
	delay(1000);
	Serial.println("init--------");
	
	
	
	// 我也提供了发送 AT 指令的函数接口,如下
	// 	sim.send_at_command("AT+IPR=9600");

SIM800C TCP 链接和发送

	char buf[350] = {0};
	sim.create_tcp(ip, port); // 创建 TCP
	sim.tcp_send(buf); // 发送数据
	sim.close_tcp_link() // 关闭 TCP

@wanglegang
Copy link

wanglegang commented Mar 14, 2020 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants