基于Arduino IDE的ESP8266编程问题
我决定使用Arduino IDE for ESP8266在我的ESP8266上编程,目标是读取数据(从TTL摄像机读取字节数组)。ESP8266-01(8Mbits闪存ROM)有8个引脚,所以我决定使用GPIO16(TXD)和GPIO2(RXD)作为软件串行引脚来实现这一点。但是ESP8266打印了一个异常,我不确定它发生了什么 所以我对这次事故有几个问题基于Arduino IDE的ESP8266编程问题,arduino,esp8266,arduino-esp8266,Arduino,Esp8266,Arduino Esp8266,我决定使用Arduino IDE for ESP8266在我的ESP8266上编程,目标是读取数据(从TTL摄像机读取字节数组)。ESP8266-01(8Mbits闪存ROM)有8个引脚,所以我决定使用GPIO16(TXD)和GPIO2(RXD)作为软件串行引脚来实现这一点。但是ESP8266打印了一个异常,我不确定它发生了什么 所以我对这次事故有几个问题 我想知道我是否可以在ESP8266上运行SoftwareSerial(ESP8266有2个UART,Serial0用于串行打印,我们无法通
SoftwareSerialCamera(int Pin1,int Pin2)
。我想知道GPIO2和GPIO16对应的Pin1和Pin2是什么。这份文件真把我弄糊涂了#include <Arduino.h>
#include "camera_VC0706.h"
#include <SoftwareSerial.h>
HTTPClient httpClient;
//define camera and bytes array, I am not sure whether the pins are correct or not
int rxPin=2;
int txPin=16;
SoftwareSerial cameraSerial(rxPin,txPin); //RX,TX
camera_VC0706 Camera = camera_VC0706(&cameraSerial);
//take photo
bool takePhoto() {
byte time=0;
writeRawSerial(F("<STATUS>WAITING</STATUS>"),true);
while(!Camera.begin(115200)) {
if(+time<=5){//try 5 times
writeRawSerial(F("."),false);
} else {
writeRawSerial("",true);
writeSerial(F("<STATUS>NO_CAMERA</STATUS>"));
return false;
}
}
writeRawSerial(F("<STATUS>CAMERA_ON</STATUS>"), false);
writeRawSerial(F("<VERSION>"), false);
writeRawSerial(Camera.getVersion(), false);
writeSerial(F("</VERSION>"));
Camera.setImageSize(VC0706_320x240);
if (!Camera.takePicture()) {
writeSerial(F("<STATUS>TAKE_PHOTO_FAIL</STATUS>"));
return false;
} else {
byte imgSize = Camera.frameLength();
writeSerial(F("<STATUS>TAKE_PHOTO_SUCCESS</STATUS>"));
writeRawSerial(F("<IMAGE_SIZE>"),false);
writeRawSerial(String(imgSize,DEC),false);
writeSerial(F("</IMAGE_SIZE>"));
freeHeap();//It was defined, but not key function, only for showing free heap of esp8266
imgBuffer=Camera.readPicture(imgSize);
freeHeap();
Camera.resumeVideo();
writeSerial(F("<STATUS>SAVE_PHOTO_SUCCESS</STATUS>"));
return true;
}
}
#包括
#包括“camera_VC0706.h”
#包括
HTTPClient-HTTPClient;
//定义摄像头和字节数组,我不确定管脚是否正确
int rxPin=2;
int-txPin=16;
软件系列摄像机系列(rxPin、txPin)//接收,发送
摄像头\u VC0706摄像头=摄像头\u VC0706(&cameraSerial);
//拍照
bool takePhoto(){
字节时间=0;
writeRawSerial(F(“等待”),true;
而(!摄影机开始(115200)){
如果(+time是这样,那么所显示的堆栈跟踪对于任何系统来说都是非常标准的,它为您提供了跟踪它所需的几乎所有信息—它不是汇编代码,而是二进制文件的十六进制地址
首先,您有一个异常28-如果我们查看,您可以看到28表示您的指针不正确,或者您试图从中断/缓存访问未缓存的数据被关闭
接下来,您有一个地址epc1。这是代码崩溃的地方,它是您上载的二进制文件的十六进制地址。此外,ctx:cont也很有用,因为它表示程序在您的代码中崩溃,而不是系统代码
您还有EXCVADR,它是您试图访问的地址0x10
考虑到这一点,几乎可以肯定的是,您要取消引用的代码中的某个地方有一个空指针。您应该使用ESP异常解码器来确定哪一行出现了令人不快的崩溃和错误的指针用法
关于使用软件序列-您只需使用数据表上的pin码。GPIO 14将是构造函数中的14号。我发现它可以工作,但在使用1天以上后,在我使用的生产产品中造成了非常奇怪的崩溃,所以根本不推荐它。我们最终使用Serial1进行调试打印,并释放了Serial0用于通用UART通信-更加可靠。您需要添加setup()和loop()的标准Arduino函数,否则它将不知道从何处开始
如果你看了示例草图,你应该能够运行一些东西,然后你就可以开始添加你的拍照代码。同时询问:如果你要这样做,请考虑添加到你交叉发布的其他位置的链接。这将使我们避免因重复工作而浪费时间,并有助于我们的工作她有同样的问题,并找到你的帖子来发现所有相关信息。