Mongoose OS ESP32-PICO-KIT breakout was designed by Espressif Systems specifically for the AWS Pop-up Loft Dedicated to Espressif. It provides a quick way to start IoT development on ESP32.
This quick start guide and reference materials include the following:

  1. Install AWS CLI command line utility
  2. Follow AWS CLI configuration guide to setup your AWS credentials
  3. Make sure that aws iot list-things command works without errors
  1. Connect the device to your computer with a micro-USB cable
  2. Follow installation instructions to install mos tool on your computer
  3. Start mos tool. A Web UI will appear, with the connection dialog
  4. Select "Serial Port" click Connect
  5. In the firmware dropdown, type aws-pico, click Flash.
  6. Enter your WiFi credentials, click "Save"
  7. Click on "START PROTOTYPING". That should open the init.js file on your device
  8. Click on "Device Config" tab in mos Web UI. Fill in AWS parameters: select your region and AWS policy (use mos-default if in doubt) and click "Save".
Troubleshooting: post on Mongoose OS forum or talk on Mongoose OS chat.
In this tutorial we are going to provision the board and connect it to AWS IoT.
1. Open Mongoose OS Web UI, click on the "Device Config" tab
2. In the "Provision device on AWS IoT" section, choose your AWS region. Select "mos-default" policy. Click "Provision with AWS IoT" button.
3. In the Web UI, click on "Device Files" tab. Click "Refresh File List" button. Click on init.js file to open it.
4. On successful connect, you should see in the device logs:
[Nov  1 17:05:30.298] mgos_mqtt_ev         MQTT CONNACK 0
[Nov  1 17:05:30.305] do_subscribe         Subscribing to 'esp32_0013A8/rpc'
[Nov  1 17:05:30.312] do_subscribe         Subscribing to 'esp32_0013A8/rpc/#'
In this tutorial we are going to write a button handler which publishes a message to AWS IoT MQTT service on a button press.
1. In the Web UI, click on "Device Files" tab. Click "Refresh File List" button. Click on init.js file to open it.
2. Copy/paste this code, click "Save + Reboot":
load('api_gpio.js');
load('api_mqtt.js');

let topic = 'mos/topic1';
let pin = 36;

GPIO.set_button_handler(pin, GPIO.PULL_UP, GPIO.INT_EDGE_NEG, 200, function() {
  let message = JSON.stringify({ foo: 'bar' });
  let ok = MQTT.pub(topic, message, 1);
  print('Published:', ok);
}, null);
3. Open AWS IoT console, click on "Test" link on the left hand side.
4. Subscribe to mos/topic1 topic.
5. Press BTN1 button couple of times, see messages appear on the AWS IoT console.
In this tutorial, we will use a timer to read measurements from the light sensor BH1730 and send those to the AWS IoT service every second.
1. Open init.js, copy/paste this code, click "Save + Reboot":
load('api_mqtt.js');
load('api_timer.js');
load('api_bh1730.js');

let topic = 'mos/topic1';
let bh1730 = BH1730.create(0x29);

Timer.set(1000, 1, function() {
  let message = JSON.stringify({ lux: bh1730.read_lux() });
  let ok = MQTT.pub(topic, message, 1);
  print('Published:', ok);
}, null);
2. Open AWS IoT console, see JSON messages with light sensor measurements appear.
In this tutorial, we add a second sensor to our existing code. The new sensor is the BME280 that reports temperature, humidity and pressure.
1. Open init.js, copy/paste this code, click "Save + Reboot": Open init.js, copy/paste this code, click "Save + Reboot":
load('api_mqtt.js');
load('api_timer.js');
load('api_bh1730.js');
load('api_arduino_bme280.js');

let topic = 'mos/topic1';
let bh1730 = BH1730.create(0x29);
let bme = Adafruit_BME280.create();
bme.begin(0x76);

Timer.set(1000, 1, function() {
  let message = JSON.stringify({
    lux: bh1730.read_lux(),
    temperature: bme.readTemperature(),
    humidity:    bme.readHumidity(),
    pressure:    bme.readPressure(),
  });
  let ok = MQTT.pub(topic, message, 1);
  print('Published:', ok, message);
}, null);
2. Open AWS IoT console, see JSON messages with sensor measurements appear.
In this tutorial, we will light up RGB LEDs remotely via AWS IoT. The device subscribes to an MQTT topic mos/topic1 and waits for MQTT messages with control commands. We are going to send those commands via the AWS IoT MQTT console.
1. Open init.js, copy/paste this code, click "Save + Reboot":
load('api_mqtt.js');
load('api_neopixel.js');

let topic = 'mos/topic1';
let strip = NeoPixel.create(23, 5, NeoPixel.GRB);

MQTT.sub(topic, function(conn, topic, msg) {
  print('Topic:', topic, 'message:', msg);
  let obj = JSON.parse(msg);
  strip.setPixel(obj.pixel, obj.r, obj.g, obj.b);
  strip.show();
}, null);
2. Open AWS IoT console, and publish this message to topic mos/topic1:
{
  "pixel": 0, "r": 40, "g": 120, "b": 220
}
3. See how LED lights up. Play with different values for pixel, red, green, blue.
Please follow instructions at IoT button App - AWS IoT, Lambda, SNS