簡體   English   中英

創建一個Python服務器以從Arduino CC3000客戶端接收數據

[英]Creating a Python server to recieve data from Arduino CC3000 client

我正在嘗試通過運行Windows 10的筆記本電腦的端口65上的LAN連接將數據從Arduino發送到計算機。

目前,由於主要障礙,我尚未到達數據部分:我無法使CC3000連接到我的Python服務器。

如果無法連接,則可以從Arduino進行調試,但是您可以從這里進行調試:(顯然,過一會兒,它放棄了尋找計算機的IP地址)

Initializing CC3000.............Initialized!
Requesting Connection to WiFi Network....Connected!
Requesting DHCP...
Failed!
Displaying Connection Details...Success!
IP Addr: 192.168.0.113
Netmask: 255.255.255.0
Gateway: 192.168.0.1
DHCPsrv: 192.168.0.1
DNSserv: 192.168.0.1
Success!
Connecting to client............
Determining IP of host...
0.0.0.0Failed!
Connecting to client............
Determining IP of host...
0.0.0.0Failed!
Connecting to client............
Determining IP of host...
0.0.0.0Failed!
Connecting to client............
Determining IP of host...
0.0.0.0Failed!
Connecting to client............
Determining IP of host...
0.0.0.0Failed!
Connecting to client............
Determining IP of host...
0.0.0.0Failed!
Connecting to client............
Determining IP of host...
0.0.0.0Failed!
Connecting to client............
Determining IP of host...
0.0.0.0Failed!
Connecting to client............
Determining IP of host...
Failed!
Failed!
Failed!

這是我的Arduino代碼(我有一個Linksprite CC3000,但是我正在使用Adafruit CC3000庫):

#include <Adafruit_CC3000.h>

#include <ccspi.h>
#include <SPI.h>
#include <string.h>
#include "utility/debug.h"
#include <stdlib.h>

// These are the interrupt and control pins
#define ADAFRUIT_CC3000_IRQ 3  // MUST be an interrupt pin!
#define ADAFRUIT_CC3000_VBAT 5 // Apparently these can be any two pins
#define ADAFRUIT_CC3000_CS 10  // But I wouldn't change these...
// Use hardware SPI for the remaining pins (On a Mega 2560, SCK = 52, MISO = 50, and MOSI = 51)
Adafruit_CC3000 cc3000 = Adafruit_CC3000(ADAFRUIT_CC3000_CS, ADAFRUIT_CC3000_IRQ, ADAFRUIT_CC3000_VBAT, SPI_CLOCK_DIV2);

#define WLAN_SSID "ARK_TP-LINK_2.4GHz_FFBC77"
#define WLAN_PASS "AHomeRWirelessK1!"
#define WLAN_SECURITY WLAN_SEC_WPA2


String readString = String(100); //string for fetching data from address
uint32_t ip = ( 192 << 24 ) & ( 168 << 16 ) & ( 0 << 8 ) & ( 115 ); // This translates into the ip address we need
                          // 323223552X; 192.168.0.X

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  Serial.print(F("Initializing CC3000............."));
  if (!cc3000.begin())
  {
    Serial.println(F("Failed! Check your wiring?"));
    while(1);
  }
  Serial.println("Initialized!");
  //Connect to the Wireless Access Point
  Serial.print("Requesting Connection to WiFi Network....");
  if (!cc3000.connectToAP(WLAN_SSID, WLAN_PASS, WLAN_SECURITY)) {
    Serial.println(F("Failed!"));
    while(1);
  }

  Serial.println(F("Connected!"));
  int DHCPTimeout = 0;
  bool failed = false;
  Serial.print(F("Requesting DHCP..."));
  Serial.println("\n" + (!cc3000.checkDHCP()));
  while (!cc3000.checkDHCP() && DHCPTimeout < 16) 
  { //Obtain IP addeess
    Serial.println("Failed!");
    delay(1000);
    DHCPTimeout = DHCPTimeout + 1;
    if (DHCPTimeout == 15)
    {
      failed = true;
    }
  }
  if (failed)
  {
    Serial.println("Timed Out...");
  } else
  {
    Serial.print("Displaying Connection Details...");
    while (! displayConnectionDetails())
    {
      Serial.println("Failed!");
      delay(1000);
    }
    Serial.println("Success!");
  }

}

void loop() {
  // put your main code here, to run repeatedly:
  Serial.println("Connecting to client............");
  Serial.println("Determining IP of host...");
  uint32_t ip;
  while (!cc3000.getHostByName("name_of_LAN_PC", &ip))
  {
    Serial.println("Failed!");
    delay(1000);
  }
  cc3000.printIPdotsRev(ip);
  Adafruit_CC3000_Client client = cc3000.connectTCP(ip, 65);
  if (client.connected()){
    Serial.println("Success!");
    Serial.println("Saying hi...");
    client.println("hi");
    client.println("");
    if (client.available()){
      char c = client.read();
      Serial.print(c);
    }
  } else{
    Serial.println("Failed!");
  }
  client.close();
  delay(1000);
}
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("Success!");
    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;
  }
}

當然,相比之下,Python代碼極其簡單:

import socket
import time
import smtplib as smtp

def send_email(subject, message, to):       #Send an email
    fro = "unoarduino77@gmail.com"
    print("Sending Email:",subject)
    server = smtp.SMTP("smtp.gmail.com", 587)
    server.ehlo()
    server.starttls()
    server.ehlo()
    server.login(fro, "alphabetagammadelta")
    header = "To:" + to + "\n" + "From: " + fro + "\n" + "Subject:" + subject + "\n"
    #header for message contains to, from, and subject
    msg = header + "\n" + message + " \n\n"
    #formulate packet using header and message
    server.sendmail(fro, to, msg)
    server.close()
def createServer():                         #Create a server to recieve
    global sock                             #data from the Arduino
    sock = socket.socket()
    host = socket.gethostname()
    print("Initializing Server")
    print("Host:", host)
    port = 65
    print("Port:", port)
    sock.bind((host, port))
    #print(sock.bind((host, port)))
    sock.listen(5)
    while 1:
        c, addr = sock.accept()
        c.send("Connected!")
        print("Connected to "+addr[0]+":"+str(addr[1]))
    print(c.recv(1024))
createServer()

如果您的主要目標是建立從arduino到python的通信,請查看此頁面:

https://playground.arduino.cc/Interfacing/Python

您可以通過串行接口在python代碼和Arduino之間進行通信

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM