-
Notifications
You must be signed in to change notification settings - Fork 11
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
Peek() Function #3
Comments
Hi BitSetter, I haven’t been working on this library for a while; Adafruit released their port of the Arduino CC3000 library (https://github.com/adafruit/Adafruit_CC3000_Library) and it’s a better version than mine. I think this is the library you’re using? They don’t have a peek() function directly, but Adafruit’s library is a port of the Texas Instruments code (like mine is) and TI’s code has the ability to make recv() be non-blocking so it will return immediately if there’s no data. Maybe that’s something you can use? Regards, Chris From: bitsetter [mailto:notifications@github.com] Hi Chris, BitSetter. /*
#include // These are the interrupt and control pins #define WLAN_SSID "" // cannot be longer than 32 characters! const unsigned long const int relay_pin = 8; // Relay pin char relayBuffer[1]; // Relay buffer Adafruit_CC3000_Client client; uint32_t t; void setup() { Serial.begin(115200); displayDriverMode(); /* Initialise the module */ /* Optional: Update the Mac Address to a known value */ uint8_t macAddress[6] = { 0x08, 0x00, 0x28, 0x01, 0x79, 0xB7 }; uint16_t firmware = checkFirmwareVersion(); displayMACAddress(); /* Optional: Get the SSID list (not available in 'tiny' mode) */ /* Delete any old connection data on the module */ /* Attempt to connect to an access point / /* NOTE: Secure connections are not available in 'Tiny' mode! */ Serial.println(F("Connected!")); /* Wait for DHCP to complete */ /* Display the IP address DNS, Gateway, etc. */ while (! displayConnectionDetails()) { } void loop() inChar = Serial.read(); if(inChar == 'e') byte sendEmail() if(cc3000.getHostByName("smtp.frontier.net", &ip)) { Serial.println(F("\r\nAttempting connection...")); }else{ if(!eRcv()) return 0; // change to your public ip if(!eRcv()) return 0; // change to your email address (sender) if(!eRcv()) return 0; // change to recipient address if(!eRcv()) return 0; Serial.println(F("Sending DATA")); if(!eRcv()) return 0; Serial.println(F("Sending email")); // change to recipient address // change to your address client.println(F("Subject: Arduino email test\r\n")); client.println(F("This is from my Arduino!")); client.println(F(".")); if(!eRcv()) return 0; Serial.println(F("Sending QUIT")); if(!eRcv()) return 0; client.close(); Serial.println(F("disconnected")); return 1; byte eRcv() //wait until data arrives // if nothing received for 10 seconds, timeout } respCode = client.peek(); //read until buffer empty: thisByte = client.read(); Serial.write(thisByte); if(respCode >= '4') } return 1; void efail() client.println(F("QUIT")); while(!client.available()) { // if nothing received for 10 seconds, timeout } while(client.available()) thisByte = client.read(); Serial.write(thisByte); client.stop(); Serial.println(F("disconnected")); /*************************************************************************/ @note The buffer size and driver mode are defined in cc3000_common.h / /***/ #ifndef CC3000_TINY_DRIVER if(!cc3000.getFirmwareVersion(&major, &minor)) /***/ if(!cc3000.getMacAddress(macAddress)) /***/ if(!cc3000.getIPAddress(&ipAddress, &netmask, &gateway, &dhcpserv, &dnsserv)) /***/ void listSSIDResults(void) index = cc3000.startSSIDscan(); Serial.print(F("Networks found: ")); Serial.println(index); while (index) { valid = cc3000.getNextSSID(&rssi, &sec, ssidname); Serial.print(F("SSID Name : ")); Serial.print(ssidname); } cc3000.stopSSIDscan(); — |
Hi Chris,
Awesome work!
Really appreciate what you have done!
Is there a way to add a peek() function into the client code?
This seems to be necessary to make the email code I have found work.
The email sketch is shown below if you are curious. See eRecv()
Thanks again,
BitSetter.
------------------------------------ Email Sketch -----------------------------------
/*
*/
include <Adafruit_CC3000.h>
include <ccspi.h>
include <SPI.h>
include <string.h>
include "utility/debug.h"
// These are the interrupt and control pins
define ADAFRUIT_CC3000_IRQ 3 // MUST be an interrupt pin!
// These can be any two pins
define ADAFRUIT_CC3000_VBAT 5
define ADAFRUIT_CC3000_CS 10
// Use hardware SPI for the remaining pins
// On an UNO, SCK = 13, MISO = 12, and MOSI = 11
Adafruit_CC3000 cc3000 = Adafruit_CC3000(ADAFRUIT_CC3000_CS, ADAFRUIT_CC3000_IRQ, ADAFRUIT_CC3000_VBAT,
SPI_CLOCK_DIV2); // you can change this clock speed but DI
define WLAN_SSID "" // cannot be longer than 32 characters!
define WLAN_PASS ""
// Security can be WLAN_SEC_UNSEC, WLAN_SEC_WEP, WLAN_SEC_WPA or WLAN_SEC_WPA2
define WLAN_SECURITY WLAN_SEC_WPA2
const unsigned long
dhcpTimeout = 60L * 1000L, // Max time to wait for address from DHCP
connectTimeout = 15L * 1000L, // Max time to wait for server connection
responseTimeout = 15L * 1000L; // Max time to wait for data from server
const int relay_pin = 8; // Relay pin
char relayBuffer[1]; // Relay buffer
Adafruit_CC3000_Client client;
uint32_t t;
void setup() {
Serial.begin(115200);
Serial.println(F("Hello, CC3000!\n"));
displayDriverMode();
Serial.print("Free RAM: "); Serial.println(getFreeRam(), DEC);
/* Initialise the module */
Serial.println(F("\nInitialising the CC3000 ..."));
if (!cc3000.begin())
{
Serial.println(F("Unable to initialise the CC3000! Check your wiring?"));
while(1);
}
/* Optional: Update the Mac Address to a known value */
uint8_t macAddress[6] = { 0x08, 0x00, 0x28, 0x01, 0x79, 0xB7 };
if (!cc3000.setMacAddress(macAddress))
{
Serial.println(F("Failed trying to update the MAC address"));
while(1);
}
uint16_t firmware = checkFirmwareVersion();
if ((firmware != 0x113) && (firmware != 0x118)) {
Serial.println(F("Wrong firmware version!"));
for(;;);
}
displayMACAddress();
/* Optional: Get the SSID list (not available in 'tiny' mode) */
ifndef CC3000_TINY_DRIVER
listSSIDResults();
endif
/* Delete any old connection data on the module */
Serial.println(F("\nDeleting old connection profiles"));
if (!cc3000.deleteProfiles()) {
Serial.println(F("Failed!"));
while(1);
}
/* Attempt to connect to an access point /
char *ssid = WLAN_SSID; / Max 32 chars */
Serial.print(F("\nAttempting to connect to ")); Serial.println(ssid);
/* NOTE: Secure connections are not available in 'Tiny' mode! */
if (!cc3000.connectToAP(WLAN_SSID, WLAN_PASS, WLAN_SECURITY)) {
Serial.println(F("Failed!"));
while(1);
}
Serial.println(F("Connected!"));
/* Wait for DHCP to complete */
Serial.println(F("Request DHCP"));
while (!cc3000.checkDHCP())
{
delay(100); // ToDo: Insert a DHCP timeout!
}
/* Display the IP address DNS, Gateway, etc. */
while (! displayConnectionDetails()) {
delay(1000);
}
}
void loop()
{
byte inChar;
inChar = Serial.read();
if(inChar == 'e')
{
if(sendEmail()) Serial.println(F("Email sent"));
else Serial.println(F("Email failed"));
}
}
byte sendEmail()
{
byte thisByte = 0;
byte respCode;
unsigned long ip, startTime, t = 0L;
// client = cc3000.connectTCP(server, 25);
// if(client.connected()) {
// Serial.println(F("connected"));
// } else {
// Serial.println(F("connection failed"));
// return 0;
// }
if(cc3000.getHostByName("smtp.frontier.net", &ip)) {
}else{
return 0;
}
if(!eRcv()) return 0;
Serial.println(F("Sending helo"));
// change to your public ip
client.println(F("helo 1.2.3.4"));
if(!eRcv()) return 0;
Serial.println(F("Sending From"));
// change to your email address (sender)
client.println(F("MAIL From: bitsetter@gmail.com"));
if(!eRcv()) return 0;
// change to recipient address
Serial.println(F("Sending To"));
client.println(F("RCPT To: paul.nichol@maximintegrated.com"));
if(!eRcv()) return 0;
Serial.println(F("Sending DATA"));
client.println(F("DATA"));
if(!eRcv()) return 0;
Serial.println(F("Sending email"));
// change to recipient address
client.println(F("To: You paul.nichol@maximintegrated.com"));
// change to your address
client.println(F("From: Me bitsetter@gmail.com"));
client.println(F("Subject: Arduino email test\r\n"));
client.println(F("This is from my Arduino!"));
client.println(F("."));
if(!eRcv()) return 0;
Serial.println(F("Sending QUIT"));
client.println(F("QUIT"));
if(!eRcv()) return 0;
client.close();
Serial.println(F("disconnected"));
return 1;
}
byte eRcv()
{
byte respCode;
byte thisByte;
int loopCount = 0;
//wait until data arrives
while(!client.available()) {
delay(1);
loopCount++;
}
respCode = client.peek();
//read until buffer empty:
while(client.available())
{
thisByte = client.read();
Serial.write(thisByte);
}
if(respCode >= '4')
{
efail();
return 0;
}
return 1;
}
void efail()
{
byte thisByte = 0;
int loopCount = 0;
client.println(F("QUIT"));
while(!client.available()) {
delay(1);
loopCount++;
}
while(client.available())
{
thisByte = client.read();
Serial.write(thisByte);
}
client.stop();
Serial.println(F("disconnected"));
}
/*************************************************************************/
/!
@brief Displays the driver mode (tiny of normal), and the buffer
size if tiny mode is not being used
/
/*************************************************************************/
void displayDriverMode(void)
{
#ifdef CC3000_TINY_DRIVER
Serial.println(F("CC3000 is configure in 'Tiny' mode"));
#else
Serial.print(F("RX Buffer : "));
Serial.print(CC3000_RX_BUFFER_SIZE);
Serial.println(F(" bytes"));
Serial.print(F("TX Buffer : "));
Serial.print(CC3000_TX_BUFFER_SIZE);
Serial.println(F(" bytes"));
#endif
}
/*************************************************************************/
/!
@brief Tries to read the CC3000's internal firmware patch ID
*/
/**************************************************************************/
uint16_t checkFirmwareVersion(void)
{
uint8_t major, minor;
uint16_t version;
ifndef CC3000_TINY_DRIVER
if(!cc3000.getFirmwareVersion(&major, &minor))
{
Serial.println(F("Unable to retrieve the firmware version!\r\n"));
version = 0;
}
else
{
Serial.print(F("Firmware V. : "));
Serial.print(major); Serial.print(F(".")); Serial.println(minor);
version = major; version <<= 8; version |= minor;
}
endif
return version;
}
/*************************************************************************/
/!
@brief Tries to read the 6-byte MAC address of the CC3000 module
*/
/**************************************************************************/
void displayMACAddress(void)
{
uint8_t macAddress[6];
if(!cc3000.getMacAddress(macAddress))
{
Serial.println(F("Unable to retrieve MAC Address!\r\n"));
}
else
{
Serial.print(F("MAC Address : "));
cc3000.printHex((byte*)&macAddress, 6);
}
}
/*************************************************************************/
/!
@brief Tries to read the IP address and other connection details
*/
/**************************************************************************/
bool displayConnectionDetails(void)
{
uint32_t ipAddress, netmask, gateway, dhcpserv, dnsserv;
if(!cc3000.getIPAddress(&ipAddress, &netmask, &gateway, &dhcpserv, &dnsserv))
{
Serial.println(F("Unable to retrieve the IP Address!\r\n"));
return false;
}
else
{
Serial.print(F("\nIP Addr: ")); cc3000.printIPdotsRev(ipAddress);
Serial.print(F("\nNetmask: ")); cc3000.printIPdotsRev(netmask);
Serial.print(F("\nGateway: ")); cc3000.printIPdotsRev(gateway);
Serial.print(F("\nDHCPsrv: ")); cc3000.printIPdotsRev(dhcpserv);
Serial.print(F("\nDNSserv: ")); cc3000.printIPdotsRev(dnsserv);
Serial.println();
return true;
}
}
/*************************************************************************/
/!
@brief Begins an SSID scan and prints out all the visible networks
*/
/**************************************************************************/
void listSSIDResults(void)
{
uint8_t valid, rssi, sec, index;
char ssidname[33];
index = cc3000.startSSIDscan();
Serial.print(F("Networks found: ")); Serial.println(index);
Serial.println(F("================================================"));
while (index) {
index--;
}
Serial.println(F("================================================"));
cc3000.stopSSIDscan();
}
The text was updated successfully, but these errors were encountered: