0
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心
发布
  • 发文章

  • 发资料

  • 发帖

  • 提问

  • 发视频

创作活动
WRL-10050

WRL-10050

  • 厂商:

    SPARKFUNELECTRONICS

  • 封装:

  • 描述:

    EVAL BOARD FOR RN-131C

  • 数据手册
  • 价格&库存
WRL-10050 数据手册
Page 1 of 25   WiFly Shield Hookup Guide CONTR IBUTORS: J O EL EB, CTAYLOR Introduction The WiFly Shield allows you to easily connect your Arduino to a wireless network, serve up data, act as a client, create an ad-hoc network for your Internet of things devices, and get data such as data and time from your network. This hookup guide will show you how get started, how to configure the WiFly module, and how to set up some simple sketches using the WiFly Shield. Covered in This Tutorial This guide will show you: • • • • • • How to connect the WiFly Shield to the Arduino How to communicate with the WiFly Shield through the terminal How to connect the WiFly to a WiFi network Simple communication over a network How to create a simple server How to update the firmware on the WiFly module All of the functions and commands used in this tutorial can be found in the Page 2 of 25 RN131 documentation: • • • • RN131 Product Page RN131 Reference Guide RN131 Datasheet SC16IS750 SPI to UART Bridge Datasheet Suggested Reading If you’re new to electronics or wireless communication, you may also want to check out these other concepts first: • • • • • • Installing an Arduino Library What is a Shield? Serial Communication SPI Communication Serial Terminal Basics How to Solder You should also have a basic understanding of simple networking terms such as: • • • • • • • • • 802.11 TCP/IP FTP Telnet SSH HTTP DNS DHCP WLAN Hardware Overview The WiFly Shield consists of two major components: • An SC16IS750 SPI-to-UART bridge chip • An RN-131C WiFly Module Page 3 o 25 The WiFly module communicates via its UART to the SC16IS750 bridge chip, which in turn communicates with the Arduino via SPI. This allows the WiFly module to communicate with the Arduino at high speed without using the Arduino’s UART so that the Arduino can still communicate with a serial terminal. Any communication from the WiFly to the Arduino (or vice versa) must be sent through the SC16IS50. The WiFly module is connected to four indicator LEDs through its I/O pins. These indicator LEDs will blink at different rates depending on the state of the module. They can provide a lot of information to the user about the state of the module without the user having to connect the device to a serial terminal. For more information on the behavior of the LEDs, see the RN131 Reference Guide. The WiFly module is also connected to four jumpers. The jumper PIO9 is a special jumper and is used to put the module into adhoc mode. If you would like to communicate directly with the WiFly from a computer in an adhoc fashion, short the PIO9 jumper with solder. Last, the WiFly has a small prototyping area to connect any other components you’d like. You could add additional LEDs, sensors, motors, or other bits to make your project come alive. WiFly Breakout Board You can also use the information in this tutorial to use the WiFly GSX Breakout. However, since the breakout board does not include an SPI-toUART IC, you will have to either use a separate conversion chip or communicate directly to the WiFly module over the UART. Keep in mind that if you do use the Arduino’s UART to communicate to the module, you will not be able to send back repsonses to the termial window unless you use a seperate UART (The Arduino mega has several UARTs or you can you the SoftwareSerial library on an Uno). Connecting the WiFly Shield to the Arduino What You Will Need To get the WiFly Shield up and networking, you’ll need the following things: Page 4 of 25 • WiFly Shield • Arduino UNO or similar Arduino compatible boards • Stackable Headers or another way to connect the shield to the Arduino • USB A-to-B Cable or whichever USB cable your Arduino board needs • A Computer • A WiFi Access Point Assembly Connecting the WiFly Shield to the Arduino is easy. Solder on the headers, and attach the shield to the Arduino board. You can use male headers or stackable headers, depending on how you intend to use your WiFly. For detailed instructions on how to connect headers to the WiFly shield, please see the Arduino Shields tutorial. WiFly Shield with standard strait male headers. Next, connect the Arduino to the computer through the USB cable. Some of the LEDs on the WiFly shield should now be blinking. You should see the yellow LED blinking quickly and the green LED blinking slowly. This indicates that the WiFly is open for new connections. WiFly Library and the Terminal Sketch WiFly Shield Library To aid in the use of the WiFly shield, several authors have contributed to making a WiFly library. It has gone through several iterations, and, although it is not perfect, it allows the end user to easily get the WiFly up and running. Page 5 of 25 Interaction with the WiFly Shield will be done via the Arduino Serial monitor or a terminal program of your choice. In order to do this, we’ll need an example sketch called SpiUartTerminal from the WiFly Shield github page. Use the following steps to install the library and sketch in the Arduino environment. 1. Download the library code as a zip file from the WiFly Shield github page. 2. Unzip the downloaded file into your …/arduino/libraries/ folder 3. Rename the unzipped folder “WiFly”. This must be done because the Arduino environment does not accept library folder names with dashes in them. 4. Start the Arduino IDE (or restart if it is open). The Terminal Sketch Once you’ve installed the library, navigate to the example sketch File->Examples->WiFlyShield->SpiUartTerminal Load the sketch in tot he Arduino IDE. This sketch allows the user to communicate with the WiFly Shield directly through the Arduino serial monitor or any other terminal emulator. Upload the sketch to the Arduino board, and open the Arduino serial monitor (or terminal emulator of your choice). Make sure the baud rate is set to 9600, 8-N-1-NONE. The Arduino should now print out an info menu with instructions on how to use the sketch. We’re now ready to configure the WiFly to connect to a network. Please note that you will need to use this sketch a lot when working with your WiFly Shield. Anytime this tutorial references talking to the WiFly module, assume that it is referring to using this sketch to do so. Troubleshooting Page 6 of 25 • If you are experiencing problems with you WiFly Shield, make sure you are using the most up to date version of the library from GitHub. The Arduino IDE is constantly evolving, and, occasionally, the newest version might not work with existing libraries. If you can’t get the WiFly shield to work with the latest version of the Arduino IDE, you may have to revert to an older version of the IDE. If you are using Arduino 0023 or older, you will want to use the pre-Arduino 1.0 version of the library. • If you are seeing data that looks mostly right but is jumbled in places when you use the terminal sketch, the problem is most likely related to not having the correct library matched up with the correct version of the IDE. Connecting to a Network The WiFly module is configured by sending it commands through its UART. To do this, the user must first place the module in command mode. For a complete list of configuration commands, please see the RN-131 Reference Guide. To begin, put the module in command mode by typing the command $$$  into the Arduino Serial Monitor and pressing enter. (Make sure the serial monitor is set to “No line ending” when you type in the $$$). The module will respond with the letters “CMD”, indicating that it is in command mode. From this point on, commands that we send must be ended with a carriage return, so in the dropdown menu next to the baud rate menu, select “Carriage return”. This will ensure that the serial monitor sends a carriage return after every command you type in the send box. Next, we need to scan for wifi networks. To do this type the command scan  Page 7 of 25 You can skip this step if you already know the credentials of your wireless network. The WiFly module will scan for any networks and print the results to the terminal. We are concerned with the columns labeled “SSID” and “Sec”. These are the name of the access point and the security protocol of the access point, respectively. We will need them to configure the WiFly to connect to the access point. At this point, we’ll need to tell the WiFly what security protocol to use. The security protocols have set values listed in the RN131 reference guide on page 65. Find the value that corresponds to the security protocol on your access point. Then, in the serial monitor, send the command set wlan auth   where is the number that corresponds to the access point’s security protocol. This tells the WiFly to use that security protocol when connecting. If your access point is using a security protocol, you will need to tell the WiFly your passphrase. To do this, send the command set wlan phrase   where is the password to connect to the access point. Now our module should be configured and ready to connect to the access point. Tell it to join by sending the command join   Where is the name of the access point you found during the scan. The WiFly module should now connect and print out information about your connection, such as the IP address. Page 8 of 25 Congrats, you are now networking from the Arduino! Autoconnect to a Network If you would like the WiFly module to automatically connect to a network upon power up, follow the above directions. Instead of using the join command, you can store the SSID and tell the module to connect to that SSID by default. Do so by using this command set wlan ssid   where is the name of the access point you’d like to connect to automatically. Then use the command set wlan join 1  This tells the module to try and connect to the SSID stored in memory automatically. The last thing is to store these settings in the WiFly’s config file. We’ll talk about this more in depth in the Configuration Files and Firmware Upgrade section, but, for now, just know that is where the WiFly stores all its settings. To do this, simply type save  Now, whenever you power up your WiFly, it should connect to that network without having to issue it any commands. To join to the network you just stored in memory without reseting the Arduino, issue just the join command without an parameters. Static IP Page 9 of 25 If you want your WiFly Shiled to have a static IP address instead of having one assigned via DHCP, you must first turn of DHCP and then set the IP address you want if it hasn’t been set already. Using the Terminal sketch, enter command mode. Issue this command to turn of DHCP: set ip dhcp 0  Next you can assign the IP address you want using this command: set ip address   Troubleshooting • If you already used the WiFly shield with DHCP on, there may already be an IP address stored in the WiFly’s memory. You can keep this IP address as you static IP address, and you know that it will be available. • If you upload any of the default example sketches that come with the WiFly library, you may overwrite the settings you just configured. If you are using an example sketch with a static IP, comment out the following lines in the Setup() function. if (!WiFly.join(ssid, passphrase)) {    while (1) {      // Hang on failure.    }  }  This will prevent the sketch from overwriting your settings. Also, check out the Configuration Files section of this tutorial to see how you can save and load different settings profiles in case you do accidentally overwrite your settings. • You may also need to change this line in any example sketch, if you plan on using a port other than 80. WiFlyServer server(80); Communicating with the Network Now that the WiFly is connected, we’d like to communicate with the network. But how? What do we send? Where do we send it? The WiFly will transmit anything it’s sent, the trick to successful networking is knowing where the data is going and how to package it. Page 10 of 25 When the WiFly connects to an access point, it communicates through a port. Ports are like sub-addresses, they indicate what type of information is being sent or received so that devices know how to use the sent data. For example, when trying to reach a website, a browser communicates on port 80, which is the HTTP port (hence the “http://” at the beginning of most URLs). The server “listens” on port 80, and when a browser request comes in, it sends the requested information back on port 80. There are thousands of port numbers, each with a different standardized protocol. By default, the WiFly transmits and listens on port 2000. We can change the port by sending the command set ip local   Where is the port on which the WiFly will listen. To listen for HTTP requests from a browser, we send the command set ip local 80  Now, any computer that is also connected to the same access point as the WiFly can query the WiFly through a browser. Simply open a browser and attempt to navigate to http://  The IP address of the WiFly is always printed when it joins a network, and you can always find it by sending the command get ip  when the device is in command mode. When the WiFly receives a request from a browser, it will print the incoming data to the terminal. For example: Page 11 of 25 The browser is now waiting for data, the WiFly can send sensor values, serve web pages, or any other data straight back to the browser! In this case, the browser is waiting for a web page. If the WiFly responds with an HTML-formatted page, the browser will display it. The next section will show you exactly how to do that. Setting Up a Simple Server In this example, you will create a simple server with your WiFly module. The functionallity will be simple, but you can take what you learn with this example to create more complex projects. Materials Needed If you’ve been following along, you should already have a WiFly shield attached to an Arduino. For this example, the only other items you will need are an RGB LED and three 330Ω resistors. You will also need some wire or other means to connect the LED to the WiFly Shield. WiFly Shield SparkFun Wish List LED - RGB Clear Common Cathode COM-00105 Ever hear of a thing called RGB? Red, Green, Blue? How about an R… (3) Resistor 330 Ohm 1/6th Watt PTH COM-08377 1/6th Watt, +/- 5% tolerance PTH resistors. Commonly used in bread… Assembly In this example, the LED and resistors will be soldered directly to the shield. If you need a refresher on soldering, check out our tutorial. For those who don’t want to solder to their shield, you can use a breadboard to build the circuit. Connect the LED and resistors to the shield like the image below. When working with a prototyping surface, don’t forget that none of the throughholes are connected to one another. You must make solder connections on the underside of the shield to complete the circuit. Page 12 of 25 Don’t forget that the RGB LED has polarity and must be placed in the correct orientation. Firmware Once the hardware is wired up, it’s time to upload the code. Copy the code below, and upload it to your Arduino, or you can download the sketch here. Note: Keep in mind that you must have gone through the previous steps to configure your WiFly module to connect to your network automatically. Page 13 of 25 /*********************************************************  WiFi LED Controller  Joel Bartlett  SparkFun Electronics  August 1, 2013  This code uses an Arduino Uno with a SparkFun WiFly shield att ached  to act as a webserver cabable of controlling an RGB LED  To use this code with Arduino 1.0+, it is recommended that yo u use  the latest version of the WiFLy Library found here:  https://github.com/sparkfun/WiFly­Shield  Many thanks to Philip Lindsay (aka Follower) for creating thi s library  and many thanks to jmr13031 for updating the library for Ardui no 1.0+  This code borrows heavily from the code found from Upverter.co m  https://gist.github.com/1201213  Many thanks to Emmanuel DeVries for doing a lot of the heavy l ifting.  This also borrows from the Sparkfun Speakjet Wifly Example by  Chris Taylor  https://www.sparkfun.com/tutorials/158  ***********************************************************/ //I took out the credentials.h file as well as the code that  //tells the wifly server the ssid and the parephrase since //this info was setup manually on the WiFly shield. //The IP address is also set maually instead of being assigne d.  #include  #include "WiFly.h" //include the WiFly experimental library char msg[128];//variables for reading in the html responses int letterCount = 0;  int redPin = 3;  int greenPin = 5;  int bluePin = 6;  WiFlyServer server(80);// This is set manually but this line i s needed to initialize server() //Port 80 is the default HTTP port Page 14 of 25 ////////////////////////////////////////////////////////////// ///// void setup()  {  pinMode(redPin, OUTPUT);  //set RGB pins as outputs pinMode(greenPin, OUTPUT); pinMode(bluePin, OUTPUT); digitalWrite(redPin, LOW); //set all LEDS to LOW/OFF digitalWrite(greenPin, LOW); digitalWrite(bluePin, LOW);    WiFly.begin();//begin WiFly communictaiosn   Serial.begin(9600);  //Serial communication at 9600 buad fo r debugging    Serial.print("IP: ");   Serial.println(WiFly.ip());  //Prints IP address once associ ated with the network //If DHCP is on, this IP can cha nge. If static IP is set, it should not.   server.begin(); //initialize the server }  ////////////////////////////////////////////////////////////// ///// void loop()  {    WiFlyClient client = server.available(); //the flag dataFlag give a notification of where the actual  post //is once we flag it we can begin recording the message //so we can do stuff with it later on int dataFlag = 0; int msgIsolator = 0; //int inChar; //variable for reading in data from the phone/ browser  //boolean isParsing = false;// flag for reading in and parsi ng data if (client) { // an http request ends with a blank line boolean current_line_is_blank = true; boolean endOfCode = true; char c; Page 15 of 25 while (client.connected())      {  if (client.available())        {          c = client.read(); delay(10); //Uncomment this line to see the HTTP respone         Serial.print(c); // if we've gotten to the end of the line (received a  newline // character) and the line is blank, the http request  has ended, // so we can send a reply if (!client.available()) {           endOfCode = true;         } else if (c == '\n') { // we're starting a new line           current_line_is_blank = true;         } else if (c != '\r') { // we've gotten a character on the current line           current_line_is_blank = false;           endOfCode = false;         }  //this is where the message that the user entered is g oing so this is where //we record it into a char array if (msgIsolator == 1)          {  recordMessage(c); delay(100);         }  if ((c == '\n' && current_line_is_blank && !client.ava ilable()) || endOfCode)          {  //As soon as the page has been refreshed the letter  count is set to zero           letterCount = 0; //Once the page has been refreshed we are no longer  on the first run through //off the program so we set this to false           endOfCode = false; // send a standard http response header           client.println("HTTP/1.1 200 OK"); Page 16 of 25 client.println("Content­Type: text/html"); //client.println("Connection: close"); client.println(); //This basically creates what the user will see on t he site. client.println(""); client.println("RGB LED Server"); //the form code creates the buttons to click and cha nge the temp/blanketstate client.println(""); client.println(""); client.println("");// I made t he buttons larger for smart phone screens client.println(""); client.println(""); client.println(""); client.println(""); client.println(""); client.println(""); client.println(""); client.println(""); client.println(""); //***NOTE: I originally added the Reload button, an d it broke everything. I combined the temperature state and nu mber into one line and //took out some other html code. It then worked. Thi s leads me to beleive that there is only so much that the WiFl y can serve up at a time??*** delay(500);//delay is very important. It gives the b rowser time to process requests letterCount = 0; checkAction();//go to check action function is a HTM L button is pressed. break; } //if you want to see all data comming in and going ou Page 17 of 25 t uncomment the line below //Serial.print(c); //We detect where the actual post data is in other wor ds what the user entered //once we isolate it we can parse it and use it if (c =='%') { dataFlag = 1; } if (dataFlag == 1) { //in here goes the user entered data it follows th e string "25=" if (c == '=') { //trim the fat of the soon to be recorded char s o we only get the user entered message msgIsolator = 1; } } } } // give the web browser time to receive the data delay(100);//delay is very important client.flush(); client.stop(); } } ////////////////////////////////////////////////////////////// ///////// char recordMessage (char incomingMsg) { //letterCount = 0; msg[letterCount] = incomingMsg; letterCount++; delay(100); } ////////////////////////////////////////////////////////////// ///////// void checkAction() // the first two or three letters of each message are read to determine which button was clicked on the webage { if (msg[0] == 'R' && msg[1] == 'e' && msg[2] == 'd')// Turn on RED LED { Page 18 of 25 digitalWrite(redPin, HIGH); digitalWrite(greenPin, LOW); digitalWrite(bluePin, LOW); } //­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ else if (msg[0] == 'G' && msg[1] == 'r' && msg[2] == 'e')//T urn on GREEN LED { digitalWrite(redPin, LOW); digitalWrite(greenPin, HIGH); digitalWrite(bluePin, LOW); } //­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ else if (msg[0] == 'B' && msg[1] == 'l' && msg[2] == 'u')//T urn on BLUE LED { digitalWrite(redPin, LOW); digitalWrite(greenPin, LOW); digitalWrite(bluePin, HIGH); } }//end checkAction() Once the code is uploaded, open the Serial Terminal set to 9600. After a few seconds, the WiFly should print out its IP address. This will vary depending on if you are using DHCP or if you assigned a static IP. In your browser, type the IP address that was printed out in the Terminal into the address bar. After a few seconds, you should see a web page with these three buttons load. Page 19 of 25 As long as everything is connected correctly, each button on the website should light up the corresponding LED when clicked. The change will not be instantaneous as the commands need to propagate from the browser, through the network, and to your WiFly shield. You can even control it from your smart phone as long as it’s connected to the same wireless network as the WiFly shield. Troubleshooting • Please note that data transmission of the wireless network is NOT instantaneous. It may take up to several seconds for your request to be sent to and processed by the Wifly shield depending on the size and configuration of your wireless network. If you are experiencing problems, there are many links in the chain to investigate. Page 20 of 25 It is also worth noting that the sketch prints data to the terminal by default. This will add some time to this delay. You can change this by commenting/uncommenting line 88. if (client.available()) { c = client.read(); delay(10); //Uncomment this line to see the HTTP respone //Serial.print(c); • When you click any of the HTML buttons, you should see the green LED on the WiFly shield go solid while it processes the request. If you see that the LED is just hanging and never returns to blinking, then the WiFly shield is getting hung up on the HTML request. This could be the result of a firmware issue or a network/browser issue. • If the red or yellow LED on the WiFly shield are blinking continuously, it is having a problem connecting to your wireless network. See the datasheet for more info on LED statuses. • If you have a steady blinking green LED and your Arduino is printing out a valid IP address but you are not seeing a webpage load, then the problem is most likely in the code or in your wireless network settings. Makes sure you selected the correct security settings and make sure you save your settings to the WiFly config file after you have set all the necessary settings. Going Further Try changing up the code to add different colors and more buttons. You can also take a look at the server example that comes with the WiFly library. This example reads the analog inputs on the Arduino and posts them to a webpage. See if you can add digital inputs and analog outputs to the same webpage. You could also replace the single RGB LED with a strip of RGB LEDS controlled via some MOSFETs. Then you could create an Internet controlled LED Light Cube Configuration Files and Upgrading the Firmware The firmware for the WiFly module is updated occasionally. Luckily for you, there is a simple way to update your module to the latest version. Page 21 of 25 The WiFly module sold by SparkFun Electronics currently ships with firmware version 2.38. To check which version of the firmware your WiFly shield is running, upload the Terminal sketch, enter command mode, and enter this command: ver Note: The version is usually displayed after each command issued in command mode as well. Before we update the firmware, let’s go over the configuration files stored within the WiFly and how to add other config files. Storing Separate Configuration Files Using the terminal sketch mentioned on the WiFly Library page, create a connection to the module, and enter command mode. Now issue the command ls to list all the files on the module. Depending on what firmware version you have, you should see something like this: You’ll notice the WiFly_GSX-2.21 file is the current firmware version and the config file is where all of the settings are stored. One great feature of the WiFly is its ability to store multiple configuration files. For instance, if you wanted to use the WiFly at both your home and your work, you could create two separate config files, each with the correct settings for both locations. To do so, set all the settings for one location such as SSID, pasphrase, security. etc. Then use the save command followed by the name you want to call that configuration. Page 22 of 25 Notice that there is now two config files named home and work. Now, to use one of those config files, simply issue the load command followed by the name of the file. It’s impotant to note that even though there are separate config files, the WiFly always uses what is stored in the default config file, so after you load a config file, it’s best to save it to the default config file using just the save command. Now, even after a firmware update, you should be able to load all of the settings you had before. (Note: Firmware updates will often include new features/settings, so there is no guarantee that your previous settings will work on a new version of the firmware.) You can delete a config file using the del command. Updating the Firmware Directions on how to update the firmware can be found on Microchip site, but we will also go over the process here. Again, use the terminal sketch to enter command mode. You must be connected to the Internet in order to get the firmware update from Roving Networks, so follow the directions on the Connecting to a Network page to connect to your wireless network. Page 23 of 25 While you are connected, you should still be able to issue commands. We now need to set the FTP settings on the module and point it to the correct website from which to retrieve the new firmware. Depending on 1) how old your module is and 2) how many settings you have changed, you may need to change several settings. The first thing to check/change is the FTP settings. Issue the command get f to see your current FTP settings. To get the update, you must make sure the FTP address is the correct one. The Roving Networks page say the the firmware must be pulled from rn.microchip.com. Pinging this URL gives the correct IP address. Now, set the FTP address to the one returned during the ping, if it does not match the one stored in memory. Also make sure the user name and password match the ones in the image below. These should be the default values unless you changed them in your configuration. With all the correct settings, issue this command ftp update You should see something like this: Page 24 of 25 Notice how the Ver is now 4.00 Once the update has finished, you need to reboot the module, give it a factory RESET, and then reboot it again. Failing to issue the factory RESET will result in config files not being saved correctly. Now, using the ls command, we can see the new firmware. The old firmware is still stored in the module in case you need to revert back to an older version. To boot from an older firmware version, use the boot image command. In the image above, you can see that the older firmware (2.21) is stored in FL# 11. So we issue the boot image 11 command to get back to that version. Page 25 of 25 Again, it’s best to reboot, RESET, and reboot after changing the firmware. As of this writing, the most up to date version of the firmware that will be downloaded with this process is Ver 4.41. Troubleshooting If you can’t get the firmware to update, check the following: • • • • • Make sure you are actually connected to the Internet. Make sure the FTP address is correct (198.175.253.161). Make sure the FTP port is correct (21). Make sure the FTP User=roving and the Pass=Pass123 If all else fails, issue a factory RESET and then try updating the firmware. Resources and Going Further This is just the basc hookup of the WiFly Shield. The shield works very well as a host or client. To use it as a host, many projects also include an SD Shield to hold large amounts of data to be served, rather than save them on the Arduino chip. Check out the other examples you downloaded with the WiFly Shield library. There are some great web client and server examples as well as a lot of other great info on using the shield To get the most out of your shield, be sure to read the reference guides and datasheets. Here are links to all the most important ones. • • • • RN131 Product Page RN131 Reference Guide RN131 Datasheet SC16IS750 SPI to UART Bridge Datasheet For more examples of what the WiFly is capable of, check out these projects: • Talking SpeakJet Server • WiFi-Enabled Heating Blanket https://learn.sparkfun.com/tutorials/wifly-shield-hookup-guide?_ga=1.143701299.725293211.1423760740 2/12/2015
WRL-10050 价格&库存

很抱歉,暂时无法提供与“WRL-10050”相匹配的价格&库存,您可以联系我们找货

免费人工找货