AcSiP Technology AI7688H 802.11b/g/n IoT Module User Manual Technical
AcSiP Technology Corporation 802.11b/g/n IoT Module Technical
Technical-User Manual
AI7688H User Manual V.1 160407 An IOT Solution Company -1- Copyright@2016 AcSiP AI7688H User Manual Revision History Revision V.1 Date 160407 Author Kevin Description New Create -2- Copyright@2016 AcSiP AI7688H User Manual Contents: 1. Introduction…………………………………………….……..4 2. Start AI7688H development …………………..……...5 3. Firmware and Bootloader…………...…………….......9 4. File Storage…………………………………………….……..19 5. Wi-Fi LED State…………………………………….…….….22 6. Network…………………………………………….………....24 7. AWS IoT…………………………………………….….…….…40 8. Peripheral………………………………………….…….…...43 9. C/C++ Programming………………………….…………..51 10. Using USB Webcam………………………………………58 11. Audio Playback and Recording…………..…………59 12. Federal Communication Commission Interference Statement………………………………………………….….61 -3- Copyright@2016 AcSiP AI7688H User Manual 1. Introduction AI7688H integrates a 1T1R 802.11n Wi-Fi radio, a 575/580 MHz MIPSR 24KEcTM CPU, 1-port fast Ethemet PHY,USB2.0 host,PCIe,SD-XC,I2S/PCM and multiple slow IOs. AI7688H provides two operation modes – IoT gateway mode and IoT device mode.In IoT gateway Mode, the PCIe Express interface can connect to 802.11ac chipset for 11ac dual-band concurrent Gateway. The high performance USB 2.0 allows AI7688H to add 3G/LTE modem support or add a H.264 ISP for wireless IP camera. For the IoT device mode, AI7688Hsupports eMMC , SD-XC and USB2.0. AI7688H can support the WiFi high quality audio via 192kbps/24bits I2S interface and VoIP application through PCM. In IoT device mode, it further supports PWM,SPI slave,3rd UART and more GPIOs. For IoT gateway, it can connect to touch panel and BLE,Zigbee/Z-Wave and sub-1G RF for smart home control. -4- Copyright@2016 AcSiP AI7688H User Manual 2. Start AI7688H development 2.1 Get S/W # Download an SSH client (Windows only) PuTTY provides Secure Socket Shell (SSH) access to the development board operating system. # Install Bonjour Print Service (For Windows 7 only) The AI7688H development board uses mylinkit.local as its local domain. In Windows7, you’ll need to installBonjour print service because mDNS is not support. This helps your computer discover the LinkIt Smart AI7688H’s IP address with the local domain name. For Windows 8 and later, Mac OS X and Linux, mDNS is supported and you can use mylinkit.local. 2.2 Power up AI7688H board After bootup and Wi-Fi initialization completes, which takes about 30 seconds, the Wi-Fi LED goes off. This means the system is ready to accept Wi-Fi connection – now we can connect to it. Following Figure shows how the Wi-Fi LED status matches the system state. -5- Copyright@2016 AcSiP AI7688H User Manual 2.3 Find the AI7688H AP and connect 2.4 Open http://mylinkit.local If the board already has a password and you don’t have or lost it, You have to press “Wi-Fi Reset button” for at least 20 seconds then Release. Then you can configure your password again. -6- Copyright@2016 AcSiP AI7688H User Manual 2.5 Get system Info and Upgrade F/W 2.6 Go to OpwnWrt for advanced configuration Enter your Password -7- Copyright@2016 AcSiP AI7688H User Manual 2.7 Access system console For OS X and Linux: # Open Terminal application # At the command prompt type # ssh root@mylinkit.local Press return and enter the password you set previously in the Web UI For Windows: -8- Copyright@2016 AcSiP AI7688H User Manual 3 Firmware and Bootloader 3.1 Flash F/W from USB drive Download lates Firmware Unzip it and copy the unzipped lks7688.img file to the root directory of a FAT32 USB Drive Attach the USB drive to the HOST port of the board with an OTG cable. Hold the WiFi button Press the MPU reset button once while holding the WiFi button Keep holding WiFi button about 5 seconds. Release WiFi button until the WiFi LED becomes OFF. orange Do not press the Wi-Fi button for longer than 20s or it will upgrade the bootloader. Wait while the WiFi LED blinks fast. This takes about 3 minutes. The device will automatically reboot after firmware update completed. -9- Copyright@2016 AcSiP AI7688H User Manual 3.2 Update bootloader USB drive must be in FAT file system or the file cannot be recognized by the AI7688H development platform. # Save the bootloader file (lks7688.ldr) in the root directory of a USB drive and name it lks7688.ldr. # Plug the USB drive to AI7688H. # Press the WiFi and MPU (Reset) button at the same time, then release the MPU Reset button but hold the WiFi button for at least 20 seconds. # After 20 seconds Wi-Fi LED will turn on. Release WiFi button. The board will start to read the bootloader (WiFi LED blinks fast) and perform the bootloader upgrade process (Wi-Fi LED blinks slowly). It takes about 2 seconds to finish the bootloader upgrade process 3.3 Build F/W from Source The following operations are performed under a Ubuntu LTS 14.04.3 environment. For a Windows or a Mac OS X host computer, you can install a VM for having the same environment: Install prerequisite packages for building the firmware: $ sudo apt-get install git g++ libncurses5-dev subversion libssl-dev gawk libxml-parser-perl unzip Download OpenWrt CC source codes: $ git clone git://git.openwrt.org/15.05/openwrt.git Prepare the default configuration file for feeds: $ cd openwrt $ cp feeds.conf.default feeds.conf -10- Copyright@2016 AcSiP AI7688H User Manual Add the AI7688H feed: $ echo src-git linkit https://github.com/MediaTek-Labs/linkit-smart-7688-feed.git >> feeds.conf Update the feed information of all available packages for building the firmware: $ ./scripts/feeds update Install all packages: $ ./scripts/feeds install -a Prepare the kernel configuration to inform OpenWrt that we want to build an firmware for AI7688H: $ make menuconfig Select the options as below: Target System: Ralink RT288x/RT3xxx Subtarget: AI7688H based boards o Save and exit (use the deafult config file name without changing it) Start the compilation process: $ make V=99 After the build process completes, the resulted firmware file will be under bin/ramips/openwrt-ramips-7688-LinkIt7688-squashfs-sysupgrade.bin. Depending on the H/W resources of the host environment, the build process may take more than 2 hours. You can use this file to do the firmware upgrade through the Web UI. Or rename it to lks7688.img for upgrading through a USB drive -11- Copyright@2016 AcSiP AI7688H User Manual 3.4 Build Bootloader from Source The following operations are performed under a Ubuntu LTS 14.04.3 environment. For a Windows or a Mac OS X host computer, you can install a VM for having the same environment: Refer to Build_F/W_Source for installing all prerequisite packages. Download the bootloader source codes: $ git clone https://github.com/MediaTek-Labs/linkit-smart-uboot.git Change to the source folder: $ cd linkit-smart-uboot Install the toolchain needed for building the bootloader: $ sudo tar xjf buildroot-gcc342.tar.bz2 -C /opt/ Since the toolchain is provided in 32-bit executables, you need to install additional packages for execution on a 64-bit machine: $ sudo dpkg --add-architecture i386 $ sudo apt-get update $ sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 Start the compilation process: $ make The resulted bootloader file is uboot.bin. You can rename it to lks7688.ldr for upgrading the system bootloader through a USB drive. -12- Copyright@2016 AcSiP AI7688H User Manual 3.5 Rebuild Existing Kernel Packages # In the config menu, select the Kernel modules. # Go to Filesystems and select the kmod-fs-ext4 as M (modularizes features). Note: other kernel packages which kmod-fs-ext4 depends on will also be selected automatically. # Follow the original build flow to continue the setup and save the configuration for the firmware building process. -13- Copyright@2016 AcSiP AI7688H User Manual # After the building process is complete, you can find the kernel packages under bin/ramips/packages/base/ (if the package you built is not there, you can also use find command to locate where it is) # After the building process is complete, you can find the kernel packages under bin/ramips/packages/base/ (if the package you built is not there, you can also use find command to locate where it is). # Copy all related kernel module packages to a USB drive. Plug the USB drive to AI7688H and perform the opkg install command to install all necessary kernel packages from the USB drive. root@mylinkit:/tmp/run/mountd/sda1# opkg install kmod*.ipk Installing kmod-crypto-core (3.18.23-1) to root... Installing kmod-crypto-hash (3.18.23-1) to root... Installing kmod-fs-ext4 (3.18.23-1) to root... Installing kmod-lib-crc16 (3.18.23-1) to root.. Package kmod-lib-crc16 (3.18.23-1) installed in root is up to date. Configuring kmod-crypto-core. Configuring kmod-crypto-hash. Configuring kmod-lib-crc16. Configuring kmod-fs-ext4. Note: if you simply install the kmod-fs-ext4, an error will occur like root@mylinkit:/tmp/run/mountd/sda1# opkg install kmod-fs-ext4_3.18.23-1_ramips_24kec.ipk Installing kmod-fs-ext4 (3.18.23-1) to root... Collected errors: * satisfy_dependencies_for: Cannot satisfy the following dependencies for kmod-fs-ext4: kmod-lib-crc16 * kmod-crypto-hash * * opkg_install_cmd: Cannot install package kmod-fs-ext4. From these information, we can know what additional kernel packages are also needed for kmod-fs-ext4 under bin/ramips/packages/base/ in Step 5 -14- Copyright@2016 AcSiP AI7688H User Manual 3.6 Bootloader and Kernel Console The Bootloader console and Linux kernel console are configured to serial port UART2(UART_TXD2 and UART_RXD2) at baudrate 57600 [04060C0F][04060C0C] DDR Calibration DQS reg = 0000898A U-Boot 1.1.3 (Sep 10 2015 - 05:56:31) Board: Ralink APSoC DRAM: 128 MB relocate_code Pointer at: 87f68000 flash manufacture id: c2, device id 20 19 find flash: MX25L25635E *** Warning - bad CRC, using default environment ============================================ Ralink UBoot Version: 4.3.0.0 -------------------------------------------ASIC 7628_MP (Port5<->None) DRAM component: 1024 Mbits DDR, width 16 DRAM bus: 16 bit Total memory: 128 MBytes Flash component: SPI Flash Date:Sep 10 2015 Time:05:56:31 ============================================ icache: sets:512, ways:4, linesz:32 ,total:65536 dcache: sets:256, ways:4, linesz:32 ,total:32768 ##### The CPU freq = 580 MHZ #### estimate memory size =128 Mbytes RESET MT7628 PHY!!!!!! GPIOMODE --> 50054404 GPIOMODE2 --> 5540551 Please choose the operation: 1: Load system code to SDRAM via TFTP. 2: Load system code then write to Flash via TFTP. 3: Boot system code via Flash (default). 4: Entr boot command line interface. 7: Load Boot Loader code then write to Flash via Serial. 9: Load Boot Loader code then write to Flash via TFTP. -15- Copyright@2016 AcSiP AI7688H User Manual There is about 1 second for you to choose from the bootloader menu. If there is no user input, the bootloader continues into Linux kernel bootup: 3: System Boot system code via Flash. ## Booting image at bc050000 ... Image Name: MIPS OpenWrt Linux-3.18.21 Image Type: MIPS Linux Kernel Image (lzma compressed) Data Size: 1118412 Bytes = 1.1 MB Load Address: 80000000 Entry Point: 80000000 Verifying Checksum ... OK Uncompressing Kernel Image ... OK No initrd ## Transferring control to Linux (at address 80000000) ... ## Giving linux memsize in MB, 128 Starting kernel ... 0.000000] Linux version 3.18.21 (root@builder1) (gcc version 4.8.3 (OpenWrt/Linaro GCC 4.8-2014.04 r47269) ) #7 Sat Nov 7 14:50:53 CET 2015 0.000000] Board has DDR2 0.000000] Analog PMU set to hw control 0.000000] Digital PMU set to hw control 0.000000] SoC Type: 0.000000] bootconsole [early0] enabled 0.000000] CPU0 revision is: 00019655 (MIPS 24KEc) 0.000000] MIPS: 0.000000] Determined physical RAM map: 0.000000] memory: 08000000 @ 00000000 (usable) At this point you can press ENTER to gain access to the Linux kernel console -16- Copyright@2016 AcSiP AI7688H User Manual 3.7 Change bootloader Console If you want to use another UART port as the bootloader console, you need to modify the bootloader. # Get bootloader source code # modify the file board/rt2880/serial.h /* * UART registers */ #if defined (MT7621_FPGA_BOARD) || defined (MT7621_ASIC_BOARD) || defined (MT7628_FPGA_BOARD) || defined (MT7628_ASIC_BOARD) #define RT2880_UART1 0x0C00 /* UART Lite */ #define RT2880_UART2 0x0D00 /* UART Lite */ #define RT2880_UART3 0x0E00 /* UART Lite */ //#define CFG_RT2880_CONSOLE RT2880_UART1 #define CFG_RT2880_CONSOLE RT2880_UART3 #else #define RT2880_UART1 0x0500 #define RT2880_UART2 0x0C00 /* UART Lite */ #define CFG_RT2880_CONSOLE RT2880_UART2 #endif and modify the CFG_RT2880_CONSOLE configuration. Note that in bootloader code, RT2880_UART1 refers to UART0(UART_TXD0/UART_TXR0) and so on. So modify the following modification: Change this: //#define CFG_RT2880_CONSOLE #define CFG_RT2880_CONSOLE RT2880_UART1 RT2880_UART3 to this: #define CFG_RT2880_CONSOLE //#define CFG_RT2880_CONSOLE RT2880_UART1 RT2880_UART3 This changes the bootloader console from UART2 to UART0. if you also want to change the baudrate, please modify the file include/configs/rt2880.h -17- Copyright@2016 AcSiP AI7688H User Manual #define SERIAL_CLOCK_DIVISOR 16 #define CONFIG_BOOTDELAY #define CONFIG_BAUDRATE 57600 #define CONFIG_SERVERIP 10.10.10.3 #define CONFIG_IPADDR 10.10.10.123 /* autoboot after 5 seconds */ Change this: #define CONFIG_BAUDRATE 57600 to this (change the baudrate from 57600 to 115200 as an example): #define CONFIG_BAUDRATE 115200 This will then change the bootloader console baudrate from 57600 to 115200 3.8 Now build the bootloader and upload it to the board Change Kernel Console If you want to use another UART port as the kernel console, you can follow the steps below to adjust the configuration. # modify the file target/linux/ramips/dts/LINKIT7688.dts and chang chosen { bootargs = "console=ttyS2,57600"; }; to this (e.g. change to UART0 and 115200 baudrate): chosen { bootargs = "console=ttyS0,115200"; }; This will then change the kernel console from UART2 to UART0 and its baudrate from 57600 to 115200. Now build the firmware and upload it to the board through the Web UI or the USB drive. -18- Copyright@2016 AcSiP AI7688H User Manual 4 File Storage 4.1 USB Drive and SD Card When a USB drive or SD card is inserted into AI7688H, they can be accessed under /Media/SD* or /Media/USB* (The device name displayed varies depending on the number of drives you use and the number of partitions available on the USB drive or SD card). You can use the following commands to check the contents of the USB drive and SD card: • • • • In this example, a USB drive named USB-A1 is used: # ls /Media/USB-A1 In this example, a SD card named SD-P1 is used: # ls /Media/SD-P1 4.2 How to mount the root FS on a SD card The on-board flash is a raw flash. It is with limited write cycles (about 100,000 times) and without wear leveling mechanism and atomic write operation. So it is not recommended to write user data to the on-board flash frequently. Besides, its storage is also limited to 32MB, the spare space might not be sufficient for storing lots of user data and software packages. As a result, it is recommended to mount the root FS on a SD card for getting more and reliable storage. Steps: Below are the steps for making this work. For details, please refer to the OpenWrt WiKi for extroot. Note: the procedure below assumes there is only one partition on the SD card. If there are multiple partitions on the SD card, you can use fdisk command to manage partition settings. 1. Insert a microSD card into the AI7688H device. Warning: all the data on the SD card will be erased in the following steps. 2. Make sure the device is under Station mode for accessing internet. 3. Open the system console of the AI7688H. 4. Type the following commands for installing related packages: -19- Copyright@2016 AcSiP AI7688H User Manual 5. Format the SD card. ext4 file system will be used in this example: During the formatting process, it'll prompt a confirmation: Proceed anyway? (y,n). Press "y" to continue.+ 6. Duplicate current root FS and move it to the SD card: 7. Create a fstab template: 8. Open the fstab configuration (use vi as the editor in this example): 9. In the 'mount' config section, change+ the target option to '/overlay' the enabled option to '1' + Then the config file will look like: (In vi, by pressing the "i" key for entering the editing mode)+ 10. Save and exit the configuration file (press "Esc" key and type ":x". Then press "Enter" in vi for saving the file). -20- Copyright@2016 AcSiP AI7688H User Manual 11. Reboot the platform. Done. Check if the setup takes effect: We can use the "df -h" command to check if the root FS is mounted successfully. When the root FS is on the on-board flash, we can see rootfs only has 11MB storage space left: After mounting the root FS on the SD card, we can see the spare space of rootfs increases: In this example, a 8GB SD card is used and the rootfs now becomes 7.2GB in size. -21- Copyright@2016 AcSiP AI7688H User Manual 5 Wi-Fi LED State After powerring up or resetting the device, the Wi-Fi LED will first blink once to indicate the bootloader is in initialization process. Following the bootloader initialization, which takes about 4 seconds, the Linux kernel is loaded and starts the bootup process. When the Linux is booting up, the Wi-Fi LED will light on steadily.It takes about 30 seconds for the Linux kernel to initialize subsystems. Once the Linux completes the boot-up process and the Wi-Fi subsystem is ready, the LED switches off.The LED will have different behaviors according to different Wi-Fi configuration. AI7688H can operate under 2 different modes, the AP (Access Point) mode and the Station mode. The AP mode forms a Wi-Fi network that allows your computer to join, and the station mode allows AI7688H to join other Wi-Fi network formed by other Wi-Fi access points.+ In AP mode There are 2 Wi-Fi LED states in AP mode: 1. LED is off. It means no client device is connected to AI7688H. 2. LED blinks 3 times per second and pauses 0.5 seconds, and repeats the pattern. This indicates there is at least 1 client device connected to AI7688H. In Station mode There are 3 Wi-Fi LED states in Station mode: 1. LED is off. AI7688H failed to connect to a wireless router and is timed-out. 2. LED blinks twice per second continuously. It indicates AI7688H is connecting to a wireless router. 3. LED blinks according to data transmission. AI7688H has connected to a wireless router and the Wi-Fi LED will blink as data is transmitting. -22- Copyright@2016 AcSiP AI7688H User Manual The Wi-Fi LED state is an important indicator for troubleshooting network configuration issues here's a list of common errors and how to fix them. LED state After switching to Station mode, the Wi-Fi LED keeps blinking twice per second, then switches off Problem Fixes It has failed to join the Wi-Fi network you assigned The bootloader is After resetting device, the corrupted or the Wi-Fi LED doesn’t blink at all on-board flash is damaged Wi-Fi LED lights up (doesn’t switch off) Wi-Fi LED blinks once after reset, but does not light up Press the Wi-Fi button for at least 5 seconds and release to restore the Wi-Fi mode to AP. Re-connect and re-configure the Wi-Fi settings accordingly. The device is bricked. You need to re-program the flash using an external hardware flash programmer. This is usually caused by a damaged system image or corrupted Wi-Fi driver. You can resolve this by upgrading the firmware usinga USB drive. Please Linux has failed to initialize properly It failed to load Linux This is usually caused by a damaged kernel system image. You can resolve this by upgrading the firmware usinga USB drive. -23- Copyright@2016 AcSiP AI7688H User Manual 6 Network 6.1 Reset Wi-Fi Configuration You can reset Wi-Fi configuration back to AP mode by press and hold WiFi button for at least 5 seconds. Note that you must release the button before 20 seconds, otherwise Factory Reset will be performed instead This can be useful when you set an incorrect password to the Station mode, or when you need to re-configure Wi-Fi settings. Note: if AI7688H is already in AP mode, this operation takes no effect 6.2 Switch to Station mode Step1: Type UCI commands to assign SSID, key, and encryption information for running Station mode Assume the wireless router to be connected is with the following properties: • • • SSID: SampleAP Password: 12345678 Encryption: WPA2 Personal In the system console of AI7688H, type the following commands: # uci set wireless.sta.ssid=SampleAP # uci set wireless.sta.key=12345678 # uci set wireless.sta.encryption=psk2 # uci set wireless.sta.disabled=0 # uci commit Step 2: Restart the Wi-Fi driver for activating the configuration Type the command in the system console: # wifi -24- Copyright@2016 AcSiP AI7688H User Manual Notice: if you use SSH to connect to the system console of AI7688H, you'll lose the connection once the wifi command is set. Because this command will restart the Wi-Fi driver. After the Wi-Fi restarts, connect your PC to the same wireless router as AI7688H did. Then you can connect to AI7688H with mylinkit.local by SSH again. You can also refer to the LED behavior to check the states of the connection in Station mode. Step 3: Check for Internet connection Now we can check if you’ve established Internet connection by typing the following command in the system console: # ping –c 5 www.mediatek.com 6.3 Switch to AP mode Step1: type UCI command to disable Station mode type the following commands in the system console # uci set wireless.sta.disabled=1 # uci commit Step 2: restart the Wi-Fi driver type the command in the console: # wifi After the Wi-Fi driver restarts, the PC should be able to scan the AI7688H AP as shown in the video of the Reset Wi-Fi Configuration section. Also the Wi-Fi status can be checked through the LED behavior. -25- Copyright@2016 AcSiP AI7688H User Manual 6.4 Setup Wireless Router -26- Copyright@2016 AcSiP AI7688H User Manual -27- Copyright@2016 AcSiP AI7688H User Manual 6.5 Change Wi-Fi AP SSID with USB Drive Step 1: Create lks7688.cfg file Create an ASCII text file named lks7688.cfg with following content: wifi_ssid=THE_AP_SSID wifi_key=THE_AP_PASSWORD Change THE_AP_SSID to the AP name you want, and change THE_AP_PASSWORD to the password you want. Save this file to the root directory of a USB drive formatted in FAT32 file system format.+ Step 2: Attach the USB Drive to the board Plug an OTG cable to the HOST port, and attach the USB drive to the OTG cable. Reboot and the AP name will change according to the file. Use THE_AP_PASSWORD you assigned to log-in into the AP. Step 3: Reset and press WiFi button • Hold the WiFi button • Press MPU reset button once • Release the WiFi button after the WiFi LED light up Note that if you hold the WiFi button longer than 5 seconds, it registers as firmware update instead. So make sure you release the WiFi button shortly after Wi-Fi LED light up. After those 3 steps, the system will then boot up with the SSID and password specified for bringing up the Wi-Fi. -28- Copyright@2016 AcSiP AI7688H User Manual 6.6 Copying Files To the Board # Using SCP SCP in OS X and Linux scp command line tool should be already installed and ready to use. If it is not installed, you can use package managers such as MacPorts or Homebrew to install it. To use SCP, open the Terminal and issue following command: scp ./helloworld root@mylinkit.local:/example/helloworld In the above example, a file named helloworld from the current directory is copied to the path /example/helloworld in AI7688H. The SCP tool will instruct you to enter the Password of root account. Using SCP to copy files in Windows You can download tools that support SCP protocol. WinSCP is used in this guide. It provides both GUI and command line interfaces. To use command line interface, type the following command in the Windows command line console: winscp.com –hostkey="*" scp://root@myLinkt.local helloworld.py This copies the helloworld.py file to the home directory of the root account. Note that by default it requires user to explicitly designate the host key of remote server, so we need to explicitly allow unknown host key by adding the -hostkey="*" parameter. -29- Copyright@2016 AcSiP AI7688H User Manual To use GUI, # start WinSCP program, select SCP for file protocol, enter mylinkit.local in the host name box, root for user name and the password you set in Web UI: # Click Yes when you see a warning window about Continue connecting to an unknown server and add its host key to a cache?.+ # Locate the file you want to transfer on the left pane (your computer) and drag it to the right , as shown below: -30- Copyright@2016 AcSiP AI7688H User Manual # After you’ve dragged the file, an Upload window will appear asking you to confirm the upload. Click OK to copy the file. Using Samba Samba is a networking tool that is built-in AI7688H and provides a file sharing service on the device for file transfer. In the example below you’ll learn how to use UCI command to share a directory and set appropriate access permission for this directory. UCI Configuration This example shares a /IoT directory. Change the shared folder path to /IoT. In AI7688H console, type the following command: # uci set samba.media.path='/IoT' Name the shared folder MySharedFolder: # uci set samba.media.name='MySharedFolder' Change the permission of the shared folder to make it readable and writable: # chmod o+rwx /IoT Save the UCI settings and reboot the AI7688H platform: # uci commit # reboot After AI7688H reboots and is connected to the same local network as your computer, you are ready to use the Samba transfer tool. Check the steps according to your operating system below. -31- Copyright@2016 AcSiP AI7688H User Manual Access Samba in Windows Open file explorer and type \\mylinkit.local, you should see the MySharedFolder. Open another file explorer, drag and drop your file to MySharedFolder, as shown below: Access Samba in OS X The steps to transfer files using Samba in Mac are as follows: Open Finder and in the menu click Go > Connect to server In the server address field, type smb://mylinkit.local and click Connect -32- Copyright@2016 AcSiP AI7688H User Manual Connect as guest: Check Finder and you’ll see MySharedFoloder. You can now transfer files in this folder. 6.7 iwpriv Commands # Access Point Scanning -> Use set SiteSurvey = 1 to enable access point scanning. Note that it takes a while to scan nearby APs. -> Use get_site_survey ra0 to collect scan results Example root@myLinkIt:/# iwpriv ra0 set SiteSurvey=1 root@myLinkIt:/# sleep 5 root@myLinkIt:/# iwpriv ra0 get_site_survey ra0 Example output: -33- Copyright@2016 AcSiP AI7688H User Manual 6.8 MAC Address Rules for MBSSID The rules of MAC address adjustment for those virtual interfaces are: 1. Modify the 2nd bit of the most significant byte in the MAC address to 1 to make it as a locally administered MAC address. 2. Apply a MAC mask and add number for enumerating each interface. The above two rules can be described as: virtual_mac[i] = ((original_mac | 0x02 00 00 00 00 00) & mac_mask) + (i << 20) And the mac_mask is defined as * If BssidNum <= 2, mac_mask = 0xff ff ff ef ff ff * If BssidNum <= 4, mac_mask = 0xff ff ff cf ff ff * If BssidNum <= 8, mac_mask = 0xff ff ff 8f ff ff * If BssidNum <= 16, mac_mask = 0xff ff ff 0f ff ff For example, if the original MAC is 9C:65:F9:1B:13:62 and the current BssidNum is set to 4, then the newly virtualized MAC address for Station mode will be: 1. 2. 3. Apply the locally administered bit => 9E:65:F9:1B:13:62. Apply mask => 9E:65:F9:0B:13:62. We only need 1 interface for Station mode, so i = 0, and this makes 9E:65:F9:0B:13:62 + (0 << 20) = 9E:65:F9:0B:13:62. As a result, the burned-in MAC address for AP mode (9C:65:F9:1B:13:62) will then become 9E:65:F9:0B:13:62 when it's in Station mode. 6.9 Using the Wi-Fi Dongle AI7688H can be used as a wireless Wi-Fi router – not just for providing an Ethernet port for Internet connection (by using a breakout board), but to provide a second Wi-Fi interface – by using a Wi-Fi dongle (the original on-board Wi-Fi is used for the AP connection between devices and AI7688H).This section walks you through how to install related packages and set up system configurations for using a Wi-Fi dongle for providing Internet connectivity on the AI7688H in AP mode. An EDIMAX Wi-Fi dongle (with Ralink -34- Copyright@2016 AcSiP AI7688H User Manual Wi-Fi chipset) is used in the following example, but the process is similar if you’re using a different Wi-Fi dongle. Before you start to install related packages to enable the Wi-Fi dongle, it’s recommended to install a package called usbutils that provides information on the Wi-Fi dongle. To install usbutils, you need to configure the AI7688H to the Station mode first and then execute the opkg update: and opkg install usbutils commands to install the utility: After the utility is installed, you’ll need to install the driver package for the Wi-Fi dongle. Insert the Wi-Fi dongle into the USB port of the AI7688H and type the command lsusb to see the product information of the dongle: You’ll see the Wi-Fi dongle is based on Ralink RT2870 Wi-Fi chipset from the output of the lsusb command. This information is important to identify the correct driver to be installed. Next, type the opkg list | grep Ralink command and you’ll see all available packages related to Ralink, as shown below: -35- Copyright@2016 AcSiP AI7688H User Manual From the available packages you’re able to identify the driver needed which is the kmod-rt2800-usb package (One that applies to RT2870 USB device). So type the opkg install kmod-rt2800-usb command to install the related driver: After the installation process is done, switch AI7688H back to the AP mode and execute the reboot command. After the reboot process is done, open and edit the /etc/config/wireless file to configure the network setup. At the end of the file, you’ll see configuration for radio1 (the Wi-Fi dongle), as shown below: -36- Copyright@2016 AcSiP AI7688H User Manual Next, you’ll do the network setup for the Wi-Fi dongle by applying the modifications as shown below to make AI7688H connect to an existing AP which is connected to the Internet (assuming the AP name is the_test_ap, and its encryption mode is psk2 with password 12345678): Save this file and exit, then type the wifi command to restart the Wi-Fi interfaces. During the Wi-Fi interface restarting process, you might see errors similar to the one shown: -37- Copyright@2016 AcSiP AI7688H User Manual If you see the error, please type the wifi command again to re-activate the W-Fi interfaces until there is no such error and you see a messages similar to below: If you see the above message, it means the interface is activated successfully. Note that at this point, you’ve not yet connected to the the_test_ap AP for the Internet connection. From the above message, you can see the MAC address of the AP to connect (it’s f0:56:76:88:9e:e8). Open the /etc/config/wireless file again and add one line for the radio1 for the BSSID property as below: Save and exit the file. Type the wifi command to connect to the the_test_ap again. At this point, you can test for Internet connection by using the ping -c 5 www.mediatek.com command. If you see a message similar to below: You have now successfully configured the Wi-Fi dongle and established the Internet connection for the AI7688H AP. -38- Copyright@2016 AcSiP AI7688H User Manual 6.10 Query IP / MAC with the Wi-Fi button With firmware v0.9.3 and above, you can use the Wi-Fi botton to query the IP / MAC address through the UART0 port. Note: the baudrate of the UART0 is 9,600. Please configure the serial monitor software correctly to see the output from this UART port.+ The behavior of this function is: when AI7688H is under AP mode, by pressing the button will output the MAC address information to the UART0 port. And when the platform is under Station mode, its IP address will be outputted to the UART port when the Wi-Fi button is pressed. If you watch the output on the UART0, you will see the output as below. Under AP mode, the MAC address is printed: AP MAC address: f0:56:76:88:9e:e8 Under Station mode, the IP address is printed:+ Device IP address: 192.168.2.3 For AI7688H users, you may need to do some wiring connections to listen to the data on the UART0 port. This sketch can help pass through the UART0 message to the Arduino serial output. After uploading this sketch to the board, open Tools/Serial Monitor in the Arduino IDE and set the baudrate to 115,200. Then you should be able to see the messages while pressing the Wi-Fi button. -39- Copyright@2016 AcSiP AI7688H User Manual 7 AWS IoT AWS IoT is a managed cloud service on AWS cloud.You can use AWS IoT Device SDK to write programs running on AI7688H connects to AWS IoT. It provides 2 different SDKs, and their compatibility with AI7688H is shown below: AWS IoT SDK for JavaScript , Embedded C Environment Setup To run the SDK examples you'll need an AWS account and optionally AWS CLI(Command Line Interface) Use an SD card to expand the root file system. This is because AWS CLI and device SDK takes considerable amount of disk spaces. Sign-up an AWS account Install AWS CLI. You can install the CLI on AI7688H directly with pip install awscli or use your PC to install it. Generates certificates required by the examples by following the instructions in AWS IoT Device SDK. Copy the certificates, private key, and root-CA file to AI7688H to ~/certs directory. You can follow the instructions here to copy files. AWS IoT SDK for JavaScript Simply follow the npm installation steps: Note that there will be two missing optional dependencies utf-8-validate@1.2.1 and bufferutil@1.2.1 - this can be ignored. Make sure you have copied proper certification files to ~/certs directory before running the examples. Then you should be able to run the examples from the SDK: -40- Copyright@2016 AcSiP AI7688H User Manual AWS IoT Embedded-C SDK Requirements You'll need a computer running OS X or Ubuntu Linux. This is because you need the cross compilation toolchain to use the AWS IoT C SDK. Building and Running SDK Examples Follow the steps below to know how to build the example applications. 1. Download and setup the cross-compilation tools (OpenWrt SDK) . Make sure you can build and deploy a helloworld example without problem. 2. Locate the path to the cross compilation toolchain. If you extract the OpenWrt SDK in path WRT_SDK, the toolchain is in 3. Download the AWS IoT Embedded-C SDK. There are 2 versions. In this example we download the mbedTLS from ARM version. 4. Extract the downloaded AWS IoT SDK, in this example we use the path AWS_SDK. 5. Use your AWS IoT Console, choose "Connect a device" to generate certification files. Download and store the certification files to AWS_SDK/certs directory. 6. Navigate the the subscribe_publish_sample sample application directory: 7. Copy the resulting configuration text to aws_iot_config.h, it will look similar to this: -41- Copyright@2016 AcSiP AI7688H User Manual 8. Modify the Makefile of the sample application. Open the Makefile and find the following line in the beginning of the file: remove the line and modify it to use the cross compilation toolchain: 9. Type make to start building the sample application. It will build an executable file subscribe_publish_sample. 10. Make sure the board is connected to the internet and is in the same network as your computer. Now we copy the certificationfiles and the sample application to the board: 11. Then we can execute the sample application on the board. First we log into the console: after login to the console, run the example: 12. You should see the following output, which is repeatedly printed: You can press ctrl-c to stop the execution. Now you can build other sample applications as well. You need to modify the Makefile and aws_iot_config.h for each sample application as described in step 7 and 8 above. -42- Copyright@2016 AcSiP AI7688H User Manual 8 Peripheral 8.1 How to switch the Pin Mux From the hardware aspect, AI7688H board handles all the Wi-Fi communication, USB device control, SD card access and sensor connection. Related software stacks are provided for developers to access the sensors attached to the AI7688H.UPM is the repository for sensor drivers written in libmraa and it provides API bindings for Python, Node.js and C languages. So it’s convenient for developers to use UPM to access peripheral sensors and modules with the programming language that they preferred. AI7688H has built-in UPM support. The detailed support list of sensors in UPM can be found in the UPM project page. -43- Copyright@2016 AcSiP AI7688H User Manual 8.2 Basic Concepts of MRAA Libmraa is a C/C++ library to interface with the peripheral on AI7688H. Libmraa is pre-installed in the system image of AI7688H and supports C++, Python and Node.js bindings. Installing MRAA: Libmraa is already installed in the system image of AI7688H, so you don't need to install it again. Basic Concepts : The majority of hardware modules such as GPIO, UART, SPI, and PWM are represented as objects created by mraa's factory function. These modules are initialized on certain pins that are identified by pin numbers. The pin numbers in the libmraa on AI7688H are identical to the GPIO number in the data sheet and in the Linux GPIO subsystem. The following Python example creates GPIO object on GPIO 2: This maps to P10 of AI7688H and it’s the IS2_WS pin in data sheet, as shown in table below. 8.3 Using MRAA in Python To use libmraa in Python, you need to import it. In the below example, libmraa is imported and the output is the build version of the mraa: GPIO and Interupts To control GPIO pins, initialize the pin as GPIO pin and set its mode. The simplest operation mode is OUTPUT - set the pin to HIGH or LOW to enable and disable external switches or to form signal patterns. -44- Copyright@2016 AcSiP AI7688H User Manual Then, call pin.write(0) to set the pin state to LOW or call pin.write(1) to set the pin state to HIGH. To make the Wi-Fi LED blink periodically, set pin 44 (WLED_N) to GPIO mode and execute the following code There’s another GPIO mode which is INPUT. It takes the digital signal input from the pin and interprets it into 1 and 0. This example will continuously print out the value received from P10 on the board. You can short 3V3 and P10 to observe the change in values Finally, an interrupt service routine can be installed to the pin and invoked when the values of the input pin P10 (GPIO2) has changed. Call isr API with the trigger type you want to register and the function to be called. Note that the function runs in a different thread. -45- Copyright@2016 AcSiP AI7688H User Manual PWM Use PWM module to generate a pulse width modulated signal pattern. This is useful to control actuator peripherals such as servo motors. To use PWM, initialize it on a certain pin such as GPIO. Note that only GPIO18, GPIO19, GPIO20, GPIO21 supports PWM on AI7688H. To control the PWM pattern, several parameters are required, including: Period This defines the carrier frequency of the modulation. It’s controlled by period, period_ms and period_us APIs. Duty Cycle or Pulse Width These two parameters are related to each other and usually you only need to set one of them.Duty cycle is controlled by write API with a value range between 0.0 to 1.0, where 0.0 is 0% of duty cycle and 1.0 is 100% of duty cycle. Pulse width also defines the pattern in a different unit: the "uptime" of the signal in time units. This is defined by pulsewidth, pulsewidth_ms, and pulsewidth_us APIs. The following example generates a 500Hz PWM signal with 25% duty cycle on pin P26. I2C I2C (Inter-Integrated Circuit) is a widely used protocol among peripherals. It consists of 2 signal pins - usually named SDA and SCL. AI7688H comes with 1 set of I2C on GPIO4(P21) and GPIO5(P20) as SCL and SDA respectively. The way I2Cs are initialized is slightly different from GPIO modules - instead of using pins, I2Cs are initialized according to its device index. Since there is only 1 set of I2C master device on AI7688H, you can simply pass 0 - and it is always on pin GPIO4 and GPIO5. I2C is capable of connecting multiple slave devices to a single I2C master. Each slave device is identified by a 7-bit address. -46- Copyright@2016 AcSiP AI7688H User Manual SPI SPI (Serial Peripheral Interface) can also be used to control peripheral devices. AI7688H it consists of 4 pins: SPI_MOSI(P22), SPI_MISO(P23), SPI_CLK(P24), SPI_CS1(P25). It’s important to note that the SPI device is also used for communicating with the internal flash storage on the board. Therefore, developers should access the SPI functionality through SPI modules only and avoid treating these SPI pins as general GPIO. Otherwise, the flash storage may work incorrectly. The SPI module in libmraa is initialized by device index, instead of pin number: 8.4 Using UPM in Python UPM is an open source sensor and peripheral driver repository based on libmraa APIs. Among the popular sensor drivers such as I2C accelerometers and many others are available from this repository. AI7688H system image is pre-installed with UPM and you can start programming on existing sensors immediately – but if the default implementation is not available, you can use opkg package manager to update the UPM library. UPM comes with bindings in C++, Python and Node.js. Let’s get started with an example where you’ll learn how to use UPM and Python to receive values from an I2C accelerometer – a Grove 3-Axis Digital Accelerometer (±16g). #Connect the accelerometer to your board. If you have the breakout board, you can attach it to the I2C grove interface. If not, you can also connect the pins from the accelerometer to the corresponding pins GND, 3V3, SDA(P20) and SCL(P21) on AI7688H. #Import pyupm_adxl345 module from the UPM repository in your program, you’ll do this in the next step. This module is used because the Grove 3-Axis Digital Accelerometer (±16g) uses the ADXL345 chipset. #Create a Python script adxl.py with following content Execute the Python script in system console by typing the following command: -47- Copyright@2016 AcSiP AI7688H User Manual 8.5 Using MRAA in node.js libmraa comes with node.js bindings - so you can use it in node.js applications. This example shows how to control the LED light with libmraa and node.js. Installing MRAA Libmraa and its Nodejs bindings are already installed in the system image of AI7688H, so you don't need to install it again. Controlling LED with MRAA in Node.js Our first tutorial is controlling the LED with a simple node.js program. Steps • Gain access to system console • Create a nodejs app: • Create a app.js file with following content: • Execute the application: The WiFi LED (orange) should now start to blink every second. -48- Copyright@2016 AcSiP AI7688H User Manual 8.6 Controlling PWM with MRAA on AI7688H Configure PWM pin: To use PWM, initialize it on a certain pin such as GPIO. Note that only GPIO18, GPIO19, GPIO20, GPIO21 supports PWM on AI7688H. So the first step is to create a Pwm object by assigning the desired GPIO number. Period This defines the carrier frequency of the modulation. It’s controlled by period, period_ms and period_us APIs, for example: Duty Cycle and Pulse Width These two parameters are related to each other and usually you only need to set one of them. Duty cycle is controlled by write API with a value range between 0.0 to 1.0, where 0.0 is 0% of duty cycle and 1.0 is 100% of duty cycle. Pulse width also defines the pattern in a different unit: the "uptime" of the signal in time units. This is defined by pulsewidth, pulsewidth_ms, and pulsewidth_us APIs. The following example generates a 500Hz PWM signal with 25% duty cycle on pin P27(GPIO19) You can also use config_percent to directly assign period and duty cycle: -49- Copyright@2016 AcSiP AI7688H User Manual Enable Output After configuration you can enable the PWM output by calling enable(true): Control a Servo You can use PWM signal to control a servo. A pulse width of 1500us means the neutral position, while usually 1000ms and 2000ms being the minimum and maximum position. So the following code resets the servo motor to neutral position: -50- Copyright@2016 AcSiP AI7688H User Manual 9 C/C++ Programming 9.1 Building C/C++ Programs with OpenWrt SDK Building C/C++ binaries for AI7688H requires cross-compilation. We provide an OpenWrt SDK. Follow these steps to build an example C/C++ ipk file that can be installed with opkg command. Requirement Currently only Ubuntu Linux and OS X are supported. Windows with Cygwin is not supported. The following steps assume an Ubuntu Linux environment. Step First, download the SDK zip file Unzip the package The name is quite long and we'll use SDK to denote its name. Note that sudo is mandatory – without it the file won’t properly unpacked. Copy the example helloworld directory to SDK/package folder. The folder structure should look like this: In the SDK directory, type make package/helloworld/compile to build the package. Once it is built: • • • • Navigate to SDK/bin/ramips/packages/base There should be a package file named helloworld_1.0.0-1_ramips_24kec.ipk Copy the .ipk file to the AI7688H In the system console of the board, navigate to the location of the .ipk file and type opkg install -51- Copyright@2016 AcSiP AI7688H User Manual • There should be some installation messages. After installation completes, type helloworld and you'll see the string Hell! O' If you want to cross-compile some known program or libraries, do this in the SDK directory: 9.2 Building and Debugging with Eclipse IDE This article describes how to setup Eclipse IDE for C/C++ Developers and OpenWrt SDK to build and debug programs running on AI7688H.After proper setup, Eclipse will be able to build, upload and attach debugger to your C/C++ program that runs on AI7688H. This can be pretty helpful if you are writing your own C/C++ programs: -52- Copyright@2016 AcSiP AI7688H User Manual Step-by-step Download and setup OpenWrt SDK Enable SFTP on AI7688H First we need to prepare AI7688H to enable SFTP service. This allows Eclipse IDE to upload binaries and debug files to the board.Make sure your board is connected to the internet and you have access to the system console. Use following commands to install and enable SFTP service. Install and Setup Eclipse IDE for C/C++ Developers Create and configure C project Now we create a Hello World project that uses cross compilation toolchain from the AI7688H OpenWrt SDK. #Launch the IDE, choose File > New > Project... #In the New Project wizard, choose C project and click Next to the project setting page. #Choose Hello World ANSI C Project and Cross GCC toolchain, as following screenshot. If you have no Cross GCC option, you need to install C/C++ GCC Cross Compiler Support. To install Cross Compiler Support, choose Help > Install new Software... and look for C/C++ GCC Cross Compiler Support(org.eclipse.cdt.build.crossgcc) and install it. -53- Copyright@2016 AcSiP AI7688H User Manual # Continue the steps in the wizard until you see the Cross GCC Command setting page as following: Fill the fields: *Cross compiler prefix: mipsel-openwrt-linux-uclibc*Cross compiler path: OpenWrt_SDK/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0,9. 33.2/bin, where OpenWrt_SDK is the path to your OpenWrt SDK directory. # Click Finish and the wizard will create the project. # Now we setup the STAGING_DIR environment variable required by OpenWrt SDK. From the menu select Project > Properties. This brings up the Properties diaglog. # From the dialog, choose C/C++ Build > Environment. This page allows you to add additional environment variables required by the build systems. In this case we're going to add a new environment variable: o Variable: STAGING_DIR o Value: OpenWrt_SDK/staging_dir/ where OpenWrt_SDK is the path to your OpenWrt SDK directory See the following screenshot for example: -54- Copyright@2016 AcSiP AI7688H User Manual Build the Hello World program Since the code is already generated by the wizard, we can start build directly. Choose Project > Build All from the menu. If the setup in previous steps are correct, you should see a build log similar to this: It will also generate a mips/le binary - this is the executable that we're going to debug in the next step. -55- Copyright@2016 AcSiP AI7688H User Manual Debug the Hello World program Now we'll configure the IDE to make it upload the executable file automatically and remote debug with gdb. # Make sure your computer is in the same Wi-Fi network as AI7688H. In this example we'll use the default domain name mylinkit.local. You'll need to change to your settings accordingly. Make sure you can access the system console with ssh. # Choose Run > Debug Configurations... from the menu. # In the dialog, select C/C++ Remote Application and then click New button. # Choose New... connection: and set Host name to mylinkit.local. Also set Default User Id to root -56- Copyright@2016 AcSiP AI7688H User Manual # Change the setting Remote Absolute File Path for C/C++ Application to /tmp/HelloWorld. You may also use other path if you wan to. # Now select the Debug tab. Set the GDB Debugger path to OpenWrt_SDK/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/b in/mipsel-openwrt-linux-uclibc-gdb where OpenWrt_SDK is the path to the OpenWrt SDK. # Click Apply then Debug. The IDE will now upload the built executable to AI7688H through SFTP service. Enter to root password of AI7688H if the IDE prompts you to do so. # The IDE now starts a gdbserver on the board, then connect Eclipse debug view to it. By default it will break at the first line of main function. And that's it - now you should be able to extend the program and can debug the program with Eclipse. -57- Copyright@2016 AcSiP AI7688H User Manual 10 Using USB Webcam By connecting a USB webcam to the USB host port on AI7688H, users can easily setup the video streaming service according to the following steps. Supported cameras AI7688H has installed Linux UVC (USB Video Class) drivers to provide USB webcam suppport. Webcams follow the UVC standard can be supported on AI7688H. The real capabilities and supported resolution depend on the current UVC driver implementation. Step-by-step we use mjpg-streamer as the streaming application and it's already installed in the system firmware by default. For the webcam, Logitech C310 is used in this example. Step 1: plug the webcam into the USB host port on AI7688H Step 2: type the following command in the system console Step 3: connect the PC to the same local network as AI7688H # If AI7688H is in AP mode, connect the PC to AI7688H AP directly. # If AI7688H is in Station mode, connect the PC to the same AP that AI7688H connects to. Step 4: open a brower and check the video -58- Copyright@2016 AcSiP AI7688H User Manual 11 Audio Playback and Recording AI7688H has an I2S interface for audio playback and recording. You'll need an audio DAC to convert I2S to analog sound data. Note: the recording function is only supported with firmware v0.9.3 and above. Audio Playback MP3 playback To play a MP3 file, use madplay: WAV playback To play a WAV file, use aplay as below: Audio recording WAV recording Note: for a high bit-rate WAV recording (like 16bit/44.1k format as the below example), please record the file to a destination with high I/O speed (e.g. USB drive, SD card, or RAM) instead of the on-board flash. Due to the low writing speed of the on-board flash, users will experience sound jittering and buffer overrun if the recorded file is written to the on-board flash. To record an audio file, use arecord as below: -59- Copyright@2016 AcSiP AI7688H User Manual 12 Federal Communication Commission Interference Statement This device complies with Part 15 of the FCC Rules. Operation is subject to the following two conditions: (1) This device may not cause harmful interference, and (2) this device must accept any interference received, including interference that may cause undesired operation. This equipment has been tested and found to comply with the limits for a Class B digital device, pursuant to Part 15 of the FCC Rules. These limits are designed to provide reasonable protection against harmful interference in a residential installation. This equipment generates, uses and can radiate radio frequency energy and, if not installed and used in accordance with the instructions, may cause harmful interference to radio communications. However, there is no guarantee that interference will not occur in a particular installation. If this equipment does cause harmful interference to radio or television reception, which can be determined by turning the equipment off and on, the user is encouraged to try to correct the interference by one of the following measures: Reorient or relocate the receiving antenna. Increase the separation between the equipment and receiver. Connect the equipment into an outlet on a circuit different from that to which the receiver is connected. Consult the dealer or an experienced radio/TV technician for help. FCC Caution: Any changes or modifications not expressly approved by the party responsible for compliance could void the user's authority to operate this equipment. This transmitter must not be co-located or operating in conjunction with any other antenna or transmitter. Radiation Exposure Statement: This equipment complies with FCC radiation exposure limits set forth for an uncontrolled environment. This equipment should be installed and operated with minimum distance 20cm between the radiator & your body. This device is intended only for OEM integrators under the following conditions: 1) The antenna must be installed such that 20 cm is maintained between the antenna and users, and the maximum antenna gain allowed for use with this device is 2 dBi. 2) The transmitter module may not be co-located with any other transmitter or antenna. As long as 2 conditions above are met, further transmitter test will not be required. However, the OEM -60- Copyright@2016 AcSiP AI7688H User Manual integrator is still responsible for testing their end-product for any additional compliance requirements required with this module installed IMPORTANT NOTE: In the event that these conditions can not be met (for example certain laptop configurations or co-location with another transmitter), then the FCC authorization is no longer considered valid and the FCC ID can not be used on the final product. In these circumstances, the OEM integrator will be responsible for re-evaluating the end product (including the transmitter) and obtaining a separate FCC authorization. End Product Labeling This transmitter module is authorized only for use in device where the antenna may be installed such that 20 cm may be maintained between the antenna and users. The final end product must be labeled in a visible area with the following: “Contains FCC ID: 2ADWC-AI7688H”. The grantee's FCC ID can be used only when all FCC compliance requirements are met. Manual Information To the End User The OEM integrator has to be aware not to provide information to the end user regarding how to install or remove this RF module in the user’s manual of the end product which integrates this module. The end user manual shall include all required regulatory information/warning as show in this manual. Figure 1 below details the standard product marking for all AcSiP Corp. products. Cross reference to the applicable line number and table for a full detail of all the variables. An IoT Solution Company FCCID:2ADWC-AI7688H AI7688H. 716004. 1610. Figure 1 Standard Product Marking Diagram- TOP VIEW -61- Copyright@2016 AcSiP
Source Exif Data:
File Type : PDF File Type Extension : pdf MIME Type : application/pdf PDF Version : 1.6 Linearized : Yes Encryption : Standard V4.4 (128-bit) User Access : Extract Author : Fiona Create Date : 2016:06:16 14:01:23+08:00 Modify Date : 2016:06:16 14:02:22+08:00 Tagged PDF : Yes XMP Toolkit : Adobe XMP Core 5.2-c001 63.139439, 2010/09/27-13:37:26 Metadata Date : 2016:06:16 14:02:22+08:00 Creator Tool : Acrobat PDFMaker 10.1 Word 版 Document ID : uuid:bec6c100-a9f0-4d27-b422-b7da96feb6a9 Instance ID : uuid:0be174e1-96ae-43ce-b213-c4fdfda4bea3 Subject : 328 Format : application/pdf Creator : Fiona Producer : Adobe PDF Library 10.0 Source Modified : D:20160616055325 Company : Microsoft Page Layout : OneColumn Page Count : 61EXIF Metadata provided by EXIF.tools